pnpm-catalog-updates 0.6.5 → 0.7.8
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.
- package/README.md +137 -0
- package/dist/index.js +2569 -2567
- package/dist/index.js.map +1 -1
- package/package.json +3 -5
- package/src/cli/commands/checkCommand.ts +2 -2
- package/src/cli/commands/initCommand.ts +3 -3
- package/src/cli/commands/securityCommand.ts +1 -1
- package/src/cli/commands/updateCommand.ts +1 -1
- package/src/cli/formatters/outputFormatter.ts +7 -2
- package/src/cli/index.ts +6 -6
- package/src/cli/interactive/interactivePrompts.ts +1 -1
- package/src/cli/validators/commandValidator.ts +1 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/formatters/outputFormatter.ts","../../../packages/core/src/domain/value-objects/workspacePath.ts","../../../packages/core/src/domain/value-objects/version.ts","../../../packages/utils/src/config/config.ts","../../../packages/utils/src/config/packageFilterConfig.ts","../../../packages/utils/src/config/configLoader.ts","../../../packages/utils/src/error-handling/errorTracker.ts","../../../packages/utils/src/logger/logger.ts","../../../packages/utils/src/error-handling/userFriendlyErrorHandler.ts","../../../packages/utils/src/utils/versionChecker.ts","../../../packages/core/src/infrastructure/utils/npmrcParser.ts","../../../packages/core/src/infrastructure/external-services/npmRegistryService.ts","../../../packages/core/src/application/services/catalogUpdateService.ts","../../../packages/core/src/application/services/workspaceService.ts","../../../packages/core/src/domain/entities/catalog.ts","../../../packages/core/src/domain/entities/package.ts","../../../packages/core/src/domain/entities/workspace.ts","../../../packages/core/src/domain/value-objects/catalogCollection.ts","../../../packages/core/src/domain/value-objects/packageCollection.ts","../../../packages/core/src/domain/value-objects/workspaceConfig.ts","../../../packages/core/src/domain/value-objects/workspaceId.ts","../../../packages/core/src/infrastructure/cache/cache.ts","../../../packages/core/src/infrastructure/file-system/fileSystemService.ts","../../../packages/core/src/infrastructure/repositories/fileWorkspaceRepository.ts","../src/cli/themes/colorTheme.ts","../src/cli/commands/checkCommand.ts","../src/cli/formatters/progressBar.ts","../src/cli/interactive/interactivePrompts.ts","../src/cli/commands/updateCommand.ts","../src/cli/commands/securityCommand.ts","../src/cli/commands/initCommand.ts","../src/cli/index.ts"],"names":["chalk","riskColor","path","fs","join","existsSync","readFileSync","resolve","homedir","semver","mkdirSync","writeFileSync","YAML","path4","dirname","packageJson","fileURLToPath","config"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Output Formatter\n *\n * Provides formatted output for CLI commands in various formats.\n * Supports table, JSON, YAML, and minimal output formats.\n */\n\nimport { ImpactAnalysis, OutdatedReport, UpdateResult } from '@pcu/core';\nimport { WorkspaceStats, WorkspaceValidationReport } from '@pcu/core';\nimport { SecurityReport } from '../commands/securityCommand.js';\n\nimport chalk from 'chalk';\nimport Table from 'cli-table3';\nimport YAML from 'yaml';\n\nexport type OutputFormat = 'table' | 'json' | 'yaml' | 'minimal';\n\n// Build ANSI escape regex without literal control characters\nconst ANSI_ESCAPE = String.fromCharCode(27);\nconst ansiRegex: RegExp = new RegExp(`${ANSI_ESCAPE}\\\\[[0-9;]*m`, 'g');\n\nexport class OutputFormatter {\n constructor(\n private readonly format: OutputFormat = 'table',\n private readonly useColor: boolean = true\n ) {}\n\n /**\n * Format outdated dependencies report\n */\n formatOutdatedReport(report: OutdatedReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2);\n case 'yaml':\n return YAML.stringify(report);\n case 'minimal':\n return this.formatOutdatedMinimal(report);\n case 'table':\n default:\n return this.formatOutdatedTable(report);\n }\n }\n\n /**\n * Format update result\n */\n formatUpdateResult(result: UpdateResult): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(result, null, 2);\n case 'yaml':\n return YAML.stringify(result);\n case 'minimal':\n return this.formatUpdateMinimal(result);\n case 'table':\n default:\n return this.formatUpdateTable(result);\n }\n }\n\n /**\n * Format impact analysis\n */\n formatImpactAnalysis(analysis: ImpactAnalysis): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(analysis, null, 2);\n case 'yaml':\n return YAML.stringify(analysis);\n case 'minimal':\n return this.formatImpactMinimal(analysis);\n case 'table':\n default:\n return this.formatImpactTable(analysis);\n }\n }\n\n /**\n * Format workspace validation report\n */\n formatValidationReport(report: WorkspaceValidationReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2);\n case 'yaml':\n return YAML.stringify(report);\n case 'minimal':\n return this.formatValidationMinimal(report);\n case 'table':\n default:\n return this.formatValidationTable(report);\n }\n }\n\n /**\n * Format workspace statistics\n */\n formatWorkspaceStats(stats: WorkspaceStats): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(stats, null, 2);\n case 'yaml':\n return YAML.stringify(stats);\n case 'minimal':\n return this.formatStatsMinimal(stats);\n case 'table':\n default:\n return this.formatStatsTable(stats);\n }\n }\n\n /**\n * Format security report\n */\n formatSecurityReport(report: SecurityReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2);\n case 'yaml':\n return YAML.stringify(report);\n case 'minimal':\n return this.formatSecurityMinimal(report);\n case 'table':\n default:\n return this.formatSecurityTable(report);\n }\n }\n\n /**\n * Format simple message with optional styling\n */\n formatMessage(message: string, type: 'success' | 'error' | 'warning' | 'info' = 'info'): string {\n if (!this.useColor) {\n return message;\n }\n\n switch (type) {\n case 'success':\n return chalk.green(message);\n case 'error':\n return chalk.red(message);\n case 'warning':\n return chalk.yellow(message);\n case 'info':\n default:\n return chalk.blue(message);\n }\n }\n\n /**\n * Format outdated dependencies as table\n */\n private formatOutdatedTable(report: OutdatedReport): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n📦 Workspace: ${report.workspace.name}`));\n lines.push(this.colorize(chalk.gray, `Path: ${report.workspace.path}`));\n\n if (!report.hasUpdates) {\n lines.push(this.colorize(chalk.green, '\\n✅ All catalog dependencies are up to date!'));\n return lines.join('\\n');\n }\n\n lines.push(\n this.colorize(chalk.yellow, `\\n🔄 Found ${report.totalOutdated} outdated dependencies\\n`)\n );\n\n for (const catalogInfo of report.catalogs) {\n if (catalogInfo.outdatedCount === 0) continue;\n\n lines.push(this.colorize(chalk.bold, `📋 Catalog: ${catalogInfo.catalogName}`));\n\n const table = new Table({\n head: this.colorizeHeaders(['Package', 'Current', 'Latest', 'Type', 'Packages']),\n style: { head: [], border: [] },\n colWidths: [25, 15, 15, 8, 20],\n });\n\n for (const dep of catalogInfo.outdatedDependencies) {\n const typeColor = this.getUpdateTypeColor(dep.updateType);\n const securityIcon = dep.isSecurityUpdate ? '🔒 ' : '';\n\n // Colorize version differences\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.currentVersion,\n dep.latestVersion,\n dep.updateType\n );\n\n table.push([\n `${securityIcon}${dep.packageName}`,\n currentColored,\n latestColored,\n this.colorize(typeColor, dep.updateType),\n `${dep.affectedPackages.length} package(s)`,\n ]);\n }\n\n lines.push(table.toString());\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format outdated dependencies minimally (npm-check-updates style)\n */\n private formatOutdatedMinimal(report: OutdatedReport): string {\n if (!report.hasUpdates) {\n return 'All dependencies up to date';\n }\n\n // Collect all dependencies first to calculate max package name width\n const allDeps: Array<{\n securityIcon: string;\n packageName: string;\n currentColored: string;\n latestColored: string;\n }> = [];\n\n for (const catalogInfo of report.catalogs) {\n for (const dep of catalogInfo.outdatedDependencies) {\n const securityIcon = dep.isSecurityUpdate ? '🔒 ' : '';\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.currentVersion,\n dep.latestVersion,\n dep.updateType\n );\n allDeps.push({\n securityIcon,\n packageName: dep.packageName,\n currentColored,\n latestColored,\n });\n }\n }\n\n // Calculate max widths for alignment\n const maxNameWidth = Math.max(\n ...allDeps.map((dep) => (dep.securityIcon + dep.packageName).length)\n );\n\n // Calculate max version widths (need to strip color codes for accurate width calculation)\n const stripAnsi = (str: string) => str.replace(ansiRegex, '');\n const maxCurrentWidth = Math.max(...allDeps.map((dep) => stripAnsi(dep.currentColored).length));\n\n // Format lines with proper alignment\n const lines: string[] = [];\n for (const dep of allDeps) {\n const nameWithIcon = dep.securityIcon + dep.packageName;\n const paddedName = nameWithIcon.padEnd(maxNameWidth);\n\n // For current version alignment, we need to pad the visible text, not the colored version\n const currentVisible = stripAnsi(dep.currentColored);\n const currentPadding = maxCurrentWidth - currentVisible.length;\n const paddedCurrent = dep.currentColored + ' '.repeat(currentPadding);\n\n lines.push(`${paddedName} ${paddedCurrent} → ${dep.latestColored}`);\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format update result as table\n */\n private formatUpdateTable(result: UpdateResult): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n📦 Workspace: ${result.workspace.name}`));\n\n if (result.success) {\n lines.push(this.colorize(chalk.green, '✅ Update completed successfully!'));\n } else {\n lines.push(this.colorize(chalk.red, '❌ Update completed with errors'));\n }\n\n lines.push('');\n\n // Updated dependencies\n if (result.updatedDependencies.length > 0) {\n lines.push(this.colorize(chalk.green, `🎉 Updated ${result.totalUpdated} dependencies:`));\n\n const table = new Table({\n head: this.colorizeHeaders(['Catalog', 'Package', 'From', 'To', 'Type']),\n style: { head: [], border: [] },\n colWidths: [15, 25, 15, 15, 8],\n });\n\n for (const dep of result.updatedDependencies) {\n const typeColor = this.getUpdateTypeColor(dep.updateType);\n\n // Colorize version differences\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.fromVersion,\n dep.toVersion,\n dep.updateType\n );\n\n table.push([\n dep.catalogName,\n dep.packageName,\n currentColored,\n latestColored,\n this.colorize(typeColor, dep.updateType),\n ]);\n }\n\n lines.push(table.toString());\n lines.push('');\n }\n\n // Skipped dependencies\n if (result.skippedDependencies.length > 0) {\n lines.push(this.colorize(chalk.yellow, `⚠️ Skipped ${result.totalSkipped} dependencies:`));\n\n for (const dep of result.skippedDependencies) {\n lines.push(` ${dep.catalogName}:${dep.packageName} - ${dep.reason}`);\n }\n lines.push('');\n }\n\n // Errors\n if (result.errors.length > 0) {\n lines.push(this.colorize(chalk.red, `❌ ${result.totalErrors} errors occurred:`));\n\n for (const error of result.errors) {\n const prefix = error.fatal ? '💥' : '⚠️ ';\n lines.push(` ${prefix} ${error.catalogName}:${error.packageName} - ${error.error}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format update result minimally (npm-check-updates style)\n */\n private formatUpdateMinimal(result: UpdateResult): string {\n const lines: string[] = [];\n\n if (result.success) {\n lines.push(`Updated ${result.totalUpdated} dependencies`);\n } else {\n lines.push(`Update failed with ${result.totalErrors} errors`);\n }\n\n if (result.updatedDependencies.length > 0) {\n // Collect version info for alignment calculation\n const depsWithVersions = result.updatedDependencies.map((dep) => {\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.fromVersion,\n dep.toVersion,\n dep.updateType\n );\n return {\n packageName: dep.packageName,\n currentColored,\n latestColored,\n };\n });\n\n // Calculate max widths for alignment\n const maxNameWidth = Math.max(...depsWithVersions.map((dep) => dep.packageName.length));\n\n const stripAnsi = (str: string) => str.replace(ansiRegex, '');\n const maxCurrentWidth = Math.max(\n ...depsWithVersions.map((dep) => stripAnsi(dep.currentColored).length)\n );\n\n for (const dep of depsWithVersions) {\n const paddedName = dep.packageName.padEnd(maxNameWidth);\n\n // Pad current version for alignment\n const currentVisible = stripAnsi(dep.currentColored);\n const currentPadding = maxCurrentWidth - currentVisible.length;\n const paddedCurrent = dep.currentColored + ' '.repeat(currentPadding);\n\n lines.push(`${paddedName} ${paddedCurrent} → ${dep.latestColored}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format impact analysis as table\n */\n private formatImpactTable(analysis: ImpactAnalysis): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n🔍 Impact Analysis: ${analysis.packageName}`));\n lines.push(this.colorize(chalk.gray, `Catalog: ${analysis.catalogName}`));\n lines.push(\n this.colorize(chalk.gray, `Update: ${analysis.currentVersion} → ${analysis.proposedVersion}`)\n );\n lines.push(this.colorize(chalk.gray, `Type: ${analysis.updateType}`));\n\n // Risk level\n const riskColor = this.getRiskColor(analysis.riskLevel);\n lines.push(this.colorize(riskColor, `Risk Level: ${analysis.riskLevel.toUpperCase()}`));\n lines.push('');\n\n // Affected packages\n if (analysis.affectedPackages.length > 0) {\n lines.push(this.colorize(chalk.bold, '📦 Affected Packages:'));\n\n const table = new Table({\n head: this.colorizeHeaders(['Package', 'Path', 'Dependency Type', 'Risk']),\n style: { head: [], border: [] },\n colWidths: [20, 30, 15, 10],\n });\n\n for (const pkg of analysis.affectedPackages) {\n const riskColor = this.getRiskColor(pkg.compatibilityRisk);\n table.push([\n pkg.packageName,\n pkg.packagePath,\n pkg.dependencyType,\n this.colorize(riskColor, pkg.compatibilityRisk),\n ]);\n }\n\n lines.push(table.toString());\n lines.push('');\n }\n\n // Security impact\n if (analysis.securityImpact.hasVulnerabilities) {\n lines.push(this.colorize(chalk.bold, '🔒 Security Impact:'));\n\n if (analysis.securityImpact.fixedVulnerabilities > 0) {\n lines.push(\n this.colorize(\n chalk.green,\n ` ✅ Fixes ${analysis.securityImpact.fixedVulnerabilities} vulnerabilities`\n )\n );\n }\n\n if (analysis.securityImpact.newVulnerabilities > 0) {\n lines.push(\n this.colorize(\n chalk.red,\n ` ⚠️ Introduces ${analysis.securityImpact.newVulnerabilities} vulnerabilities`\n )\n );\n }\n\n lines.push('');\n }\n\n // Recommendations\n if (analysis.recommendations.length > 0) {\n lines.push(this.colorize(chalk.bold, '💡 Recommendations:'));\n for (const rec of analysis.recommendations) {\n lines.push(` ${rec}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format impact analysis minimally\n */\n private formatImpactMinimal(analysis: ImpactAnalysis): string {\n return [\n `${analysis.packageName}: ${analysis.currentVersion} → ${analysis.proposedVersion}`,\n `Risk: ${analysis.riskLevel}`,\n `Affected: ${analysis.affectedPackages.length} packages`,\n ].join('\\n');\n }\n\n /**\n * Format validation report as table\n */\n private formatValidationTable(report: WorkspaceValidationReport): string {\n const lines: string[] = [];\n\n // Header\n const statusIcon = report.isValid ? '✅' : '❌';\n const statusColor = report.isValid ? chalk.green : chalk.red;\n\n lines.push(this.colorize(chalk.bold, `\\n${statusIcon} Workspace Validation`));\n lines.push(this.colorize(statusColor, `Status: ${report.isValid ? 'VALID' : 'INVALID'}`));\n lines.push('');\n\n // Workspace info\n lines.push(this.colorize(chalk.bold, '📦 Workspace Information:'));\n lines.push(` Path: ${report.workspace.path}`);\n lines.push(` Name: ${report.workspace.name}`);\n lines.push(` Packages: ${report.workspace.packageCount}`);\n lines.push(` Catalogs: ${report.workspace.catalogCount}`);\n lines.push('');\n\n // Errors\n if (report.errors.length > 0) {\n lines.push(this.colorize(chalk.red, '❌ Errors:'));\n for (const error of report.errors) {\n lines.push(` • ${error}`);\n }\n lines.push('');\n }\n\n // Warnings\n if (report.warnings.length > 0) {\n lines.push(this.colorize(chalk.yellow, '⚠️ Warnings:'));\n for (const warning of report.warnings) {\n lines.push(` • ${warning}`);\n }\n lines.push('');\n }\n\n // Recommendations\n if (report.recommendations.length > 0) {\n lines.push(this.colorize(chalk.blue, '💡 Recommendations:'));\n for (const rec of report.recommendations) {\n lines.push(` • ${rec}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format validation report minimally\n */\n private formatValidationMinimal(report: WorkspaceValidationReport): string {\n const status = report.isValid ? 'VALID' : 'INVALID';\n const errors = report.errors.length;\n const warnings = report.warnings.length;\n\n return `${status} (${errors} errors, ${warnings} warnings)`;\n }\n\n /**\n * Format workspace statistics as table\n */\n private formatStatsTable(stats: WorkspaceStats): string {\n const lines: string[] = [];\n\n lines.push(this.colorize(chalk.bold, `\\n📊 Workspace Statistics`));\n lines.push(this.colorize(chalk.gray, `Workspace: ${stats.workspace.name}`));\n lines.push('');\n\n const table = new Table({\n head: this.colorizeHeaders(['Metric', 'Count']),\n style: { head: [], border: [] },\n colWidths: [30, 10],\n });\n\n table.push(['Total Packages', stats.packages.total.toString()]);\n table.push(['Packages with Catalog Refs', stats.packages.withCatalogReferences.toString()]);\n table.push(['Total Catalogs', stats.catalogs.total.toString()]);\n table.push(['Catalog Entries', stats.catalogs.totalEntries.toString()]);\n table.push(['Total Dependencies', stats.dependencies.total.toString()]);\n table.push(['Catalog References', stats.dependencies.catalogReferences.toString()]);\n table.push(['Dependencies', stats.dependencies.byType.dependencies.toString()]);\n table.push(['Dev Dependencies', stats.dependencies.byType.devDependencies.toString()]);\n table.push(['Peer Dependencies', stats.dependencies.byType.peerDependencies.toString()]);\n table.push([\n 'Optional Dependencies',\n stats.dependencies.byType.optionalDependencies.toString(),\n ]);\n\n lines.push(table.toString());\n\n return lines.join('\\n');\n }\n\n /**\n * Format workspace statistics minimally\n */\n private formatStatsMinimal(stats: WorkspaceStats): string {\n return [\n `Packages: ${stats.packages.total}`,\n `Catalogs: ${stats.catalogs.total}`,\n `Dependencies: ${stats.dependencies.total}`,\n ].join(', ');\n }\n\n /**\n * Format security report as table\n */\n private formatSecurityTable(report: SecurityReport): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, '\\n🔒 Security Report'));\n lines.push(this.colorize(chalk.gray, `Workspace: ${report.metadata.workspacePath}`));\n lines.push(\n this.colorize(chalk.gray, `Scan Date: ${new Date(report.metadata.scanDate).toLocaleString()}`)\n );\n lines.push(this.colorize(chalk.gray, `Tools: ${report.metadata.scanTools.join(', ')}`));\n\n // Summary\n lines.push('');\n lines.push(this.colorize(chalk.bold, '📊 Summary:'));\n\n const summaryTable = new Table({\n head: this.colorizeHeaders(['Severity', 'Count']),\n style: { head: [], border: [] },\n colWidths: [15, 10],\n });\n\n summaryTable.push(['Critical', this.colorize(chalk.red, report.summary.critical.toString())]);\n summaryTable.push(['High', this.colorize(chalk.yellow, report.summary.high.toString())]);\n summaryTable.push(['Moderate', this.colorize(chalk.blue, report.summary.moderate.toString())]);\n summaryTable.push(['Low', this.colorize(chalk.green, report.summary.low.toString())]);\n summaryTable.push(['Info', this.colorize(chalk.gray, report.summary.info.toString())]);\n summaryTable.push([\n 'Total',\n this.colorize(chalk.bold, report.summary.totalVulnerabilities.toString()),\n ]);\n\n lines.push(summaryTable.toString());\n\n // Vulnerabilities\n if (report.vulnerabilities.length > 0) {\n lines.push('');\n lines.push(this.colorize(chalk.bold, '🐛 Vulnerabilities:'));\n\n const vulnTable = new Table({\n head: this.colorizeHeaders(['Package', 'Severity', 'Title', 'Fix Available']),\n style: { head: [], border: [] },\n colWidths: [20, 12, 40, 15],\n });\n\n for (const vuln of report.vulnerabilities) {\n const severityColor = this.getSeverityColor(vuln.severity);\n const fixStatus = vuln.fixAvailable\n ? typeof vuln.fixAvailable === 'string'\n ? vuln.fixAvailable\n : 'Yes'\n : 'No';\n\n vulnTable.push([\n vuln.package,\n this.colorize(severityColor, vuln.severity.toUpperCase()),\n vuln.title.length > 35 ? vuln.title.substring(0, 35) + '...' : vuln.title,\n fixStatus,\n ]);\n }\n\n lines.push(vulnTable.toString());\n }\n\n // Recommendations\n if (report.recommendations.length > 0) {\n lines.push('');\n lines.push(this.colorize(chalk.bold, '💡 Recommendations:'));\n\n for (const rec of report.recommendations) {\n lines.push(` ${rec.package}: ${rec.currentVersion} → ${rec.recommendedVersion}`);\n lines.push(` ${rec.reason} (${rec.impact})`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format security report minimally\n */\n private formatSecurityMinimal(report: SecurityReport): string {\n const vulnerabilities = report.summary.totalVulnerabilities;\n if (vulnerabilities === 0) {\n return 'No vulnerabilities found';\n }\n\n return [\n `${vulnerabilities} vulnerabilities found:`,\n ` Critical: ${report.summary.critical}`,\n ` High: ${report.summary.high}`,\n ` Moderate: ${report.summary.moderate}`,\n ` Low: ${report.summary.low}`,\n ].join('\\n');\n }\n\n /**\n * Get color for severity level\n */\n private getSeverityColor(severity: string): typeof chalk {\n switch (severity.toLowerCase()) {\n case 'critical':\n return chalk.red;\n case 'high':\n return chalk.yellow;\n case 'moderate':\n return chalk.blue;\n case 'low':\n return chalk.green;\n default:\n return chalk.gray;\n }\n }\n\n /**\n * Apply color if color is enabled\n */\n private colorize(colorFn: typeof chalk, text: string): string {\n return this.useColor ? colorFn(text) : text;\n }\n\n /**\n * Colorize table headers\n */\n private colorizeHeaders(headers: string[]): string[] {\n return this.useColor ? headers.map((h) => chalk.bold.cyan(h)) : headers;\n }\n\n /**\n * Get color for update type\n */\n private getUpdateTypeColor(updateType: string): typeof chalk {\n switch (updateType) {\n case 'major':\n return chalk.red;\n case 'minor':\n return chalk.yellow;\n case 'patch':\n return chalk.green;\n default:\n return chalk.gray;\n }\n }\n\n /**\n * Get color for risk level\n */\n private getRiskColor(riskLevel: string): typeof chalk {\n switch (riskLevel) {\n case 'high':\n return chalk.red;\n case 'medium':\n return chalk.yellow;\n case 'low':\n return chalk.green;\n default:\n return chalk.gray;\n }\n }\n\n /**\n * Colorize version differences between current and latest\n */\n private colorizeVersionDiff(\n current: string,\n latest: string,\n updateType: string\n ): {\n currentColored: string;\n latestColored: string;\n } {\n if (!this.useColor) {\n return { currentColored: current, latestColored: latest };\n }\n\n // Parse version numbers to identify different parts\n const parseVersion = (version: string) => {\n // Remove leading ^ or ~ or other prefix characters\n const cleanVersion = version.replace(/^[\\^~>=<]+/, '');\n const parts = cleanVersion.split('.');\n return {\n major: parts[0] || '0',\n minor: parts[1] || '0',\n patch: parts[2] || '0',\n extra: parts.slice(3).join('.'),\n prefix: version.substring(0, version.length - cleanVersion.length),\n };\n };\n\n const currentParts = parseVersion(current);\n const latestParts = parseVersion(latest);\n\n // Determine color based on update type for highlighting differences\n const diffColor = this.getUpdateTypeColor(updateType);\n\n // Build colored version strings by comparing each part\n const colorCurrentPart = (part: string, latestPart: string, isChanged: boolean) => {\n if (isChanged && part !== latestPart) {\n return chalk.dim.white(part); // Dim white for old version part\n }\n return chalk.white(part); // Unchanged parts in white\n };\n\n const colorLatestPart = (part: string, currentPart: string, isChanged: boolean) => {\n if (isChanged && part !== currentPart) {\n return diffColor(part); // Highlight the new version part with update type color\n }\n return chalk.white(part); // Unchanged parts in white\n };\n\n // Check which parts are different\n const majorChanged = currentParts.major !== latestParts.major;\n const minorChanged = currentParts.minor !== latestParts.minor;\n const patchChanged = currentParts.patch !== latestParts.patch;\n const extraChanged = currentParts.extra !== latestParts.extra;\n\n // Build colored current version\n let currentColored = currentParts.prefix;\n currentColored += colorCurrentPart(currentParts.major, latestParts.major, majorChanged);\n currentColored += '.';\n currentColored += colorCurrentPart(currentParts.minor, latestParts.minor, minorChanged);\n currentColored += '.';\n currentColored += colorCurrentPart(currentParts.patch, latestParts.patch, patchChanged);\n if (currentParts.extra) {\n currentColored += '.' + colorCurrentPart(currentParts.extra, latestParts.extra, extraChanged);\n }\n\n // Build colored latest version\n let latestColored = latestParts.prefix;\n latestColored += colorLatestPart(latestParts.major, currentParts.major, majorChanged);\n latestColored += '.';\n latestColored += colorLatestPart(latestParts.minor, currentParts.minor, minorChanged);\n latestColored += '.';\n latestColored += colorLatestPart(latestParts.patch, currentParts.patch, patchChanged);\n if (latestParts.extra) {\n latestColored += '.' + colorLatestPart(latestParts.extra, currentParts.extra, extraChanged);\n }\n\n return { currentColored, latestColored };\n }\n}\n","/**\n * WorkspacePath Value Object\n *\n * Represents a file system path to a pnpm workspace.\n * This is an immutable value object that validates and normalizes workspace paths.\n */\n\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nexport class WorkspacePath {\n private readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n /**\n * Create a WorkspacePath from a string\n */\n public static fromString(pathString: string): WorkspacePath {\n if (!pathString || pathString.trim().length === 0) {\n throw new Error('WorkspacePath cannot be empty');\n }\n\n // Normalize the path\n const normalized = path.resolve(pathString.trim());\n\n return new WorkspacePath(normalized);\n }\n\n /**\n * Create a WorkspacePath from the current working directory\n */\n public static current(): WorkspacePath {\n return new WorkspacePath(process.cwd());\n }\n\n /**\n * Create a WorkspacePath from file URL (useful for ES modules)\n */\n public static fromFileURL(fileUrl: string): WorkspacePath {\n const filePath = fileURLToPath(fileUrl);\n const directory = path.dirname(filePath);\n return new WorkspacePath(directory);\n }\n\n /**\n * Get the absolute path as a string\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Get the directory name (last part of the path)\n */\n public getDirectoryName(): string {\n return path.basename(this.value);\n }\n\n /**\n * Join with another path segment\n */\n public join(...segments: string[]): WorkspacePath {\n const joined = path.join(this.value, ...segments);\n return new WorkspacePath(joined);\n }\n\n /**\n * Get the parent directory\n */\n public getParent(): WorkspacePath {\n const parent = path.dirname(this.value);\n return new WorkspacePath(parent);\n }\n\n /**\n * Check if this path is a subdirectory of another path\n */\n public isSubdirectoryOf(other: WorkspacePath): boolean {\n const relativePath = path.relative(other.value, this.value);\n return !relativePath.startsWith('..') && !path.isAbsolute(relativePath);\n }\n\n /**\n * Get relative path from another WorkspacePath\n */\n public relativeTo(other: WorkspacePath): string {\n return path.relative(other.value, this.value);\n }\n\n /**\n * Check equality with another WorkspacePath\n */\n public equals(other: WorkspacePath): boolean {\n return path.resolve(this.value) === path.resolve(other.value);\n }\n\n /**\n * Get the value for serialization\n */\n public getValue(): string {\n return this.value;\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): WorkspacePath {\n return WorkspacePath.fromString(json);\n }\n\n /**\n * Check if this path exists (requires async validation in infrastructure layer)\n */\n public async exists(): Promise<boolean> {\n try {\n const fs = await import('fs/promises');\n await fs.access(this.value);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Get the path to pnpm-workspace.yaml\n */\n public getPnpmWorkspaceConfigPath(): WorkspacePath {\n return this.join('pnpm-workspace.yaml');\n }\n\n /**\n * Get the path to package.json\n */\n public getPackageJsonPath(): WorkspacePath {\n return this.join('package.json');\n }\n}\n","/**\n * Version Value Object\n *\n * Represents a semantic version with comparison and validation capabilities.\n * Handles version ranges, pre-release versions, and semantic version operations.\n */\n\nimport semver from 'semver';\n\nexport class Version {\n private readonly value: string;\n private readonly semverInstance: semver.SemVer;\n\n private constructor(value: string, semverInstance: semver.SemVer) {\n this.value = value;\n this.semverInstance = semverInstance;\n }\n\n /**\n * Create a Version from a version string\n */\n public static fromString(versionString: string): Version {\n if (!versionString || versionString.trim().length === 0) {\n throw new Error('Version string cannot be empty');\n }\n\n const cleaned = versionString.trim();\n const parsedVersion = semver.parse(cleaned);\n\n if (!parsedVersion) {\n throw new Error(`Invalid version string: ${versionString}`);\n }\n\n return new Version(cleaned, parsedVersion);\n }\n\n /**\n * Create a Version from semver components\n */\n public static fromComponents(\n major: number,\n minor: number,\n patch: number,\n prerelease?: string\n ): Version {\n let versionString = `${major}.${minor}.${patch}`;\n if (prerelease) {\n versionString += `-${prerelease}`;\n }\n\n return Version.fromString(versionString);\n }\n\n /**\n * Parse a version that might include range operators\n */\n public static parseVersionRange(rangeString: string): VersionRange {\n return VersionRange.fromString(rangeString);\n }\n\n /**\n * Get the version string\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Get major version number\n */\n public getMajor(): number {\n return this.semverInstance.major;\n }\n\n /**\n * Get minor version number\n */\n public getMinor(): number {\n return this.semverInstance.minor;\n }\n\n /**\n * Get patch version number\n */\n public getPatch(): number {\n return this.semverInstance.patch;\n }\n\n /**\n * Get prerelease identifier\n */\n public getPrerelease(): string[] {\n return this.semverInstance.prerelease.map((p) => p.toString());\n }\n\n /**\n * Check if this is a prerelease version\n */\n public isPrerelease(): boolean {\n return this.semverInstance.prerelease.length > 0;\n }\n\n /**\n * Compare with another version\n */\n public compareTo(other: Version): number {\n return semver.compare(this.value, other.value);\n }\n\n /**\n * Check if this version is newer than another\n */\n public isNewerThan(other: Version): boolean {\n return this.compareTo(other) > 0;\n }\n\n /**\n * Check if this version is older than another\n */\n public isOlderThan(other: Version): boolean {\n return this.compareTo(other) < 0;\n }\n\n /**\n * Check if this version equals another\n */\n public equals(other: Version): boolean {\n return this.compareTo(other) === 0;\n }\n\n /**\n * Check if this version satisfies a range\n */\n public satisfies(range: VersionRange): boolean {\n return range.includes(this);\n }\n\n /**\n * Get the difference type compared to another version\n */\n public getDifferenceType(other: Version): 'major' | 'minor' | 'patch' | 'prerelease' | 'same' {\n if (this.equals(other)) {\n return 'same';\n }\n\n const diff = semver.diff(this.value, other.value);\n return diff as 'major' | 'minor' | 'patch' | 'prerelease';\n }\n\n /**\n * Increment version by type\n */\n public increment(type: 'major' | 'minor' | 'patch', prerelease?: string): Version {\n const incremented = semver.inc(this.value, type, prerelease);\n if (!incremented) {\n throw new Error(`Failed to increment version ${this.value} by ${type}`);\n }\n return Version.fromString(incremented);\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): Version {\n return Version.fromString(json);\n }\n}\n\n/**\n * Version Range Value Object\n *\n * Represents a version range (e.g., \"^1.2.3\", \"~2.0.0\", \">=1.0.0 <2.0.0\")\n */\nexport class VersionRange {\n private readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n /**\n * Create a VersionRange from a range string\n */\n public static fromString(rangeString: string): VersionRange {\n if (!rangeString || rangeString.trim().length === 0) {\n throw new Error('Version range string cannot be empty');\n }\n\n const cleaned = rangeString.trim();\n\n // Validate the range\n try {\n semver.validRange(cleaned);\n } catch (error) {\n throw new Error(`Invalid version range: ${rangeString}`);\n }\n\n if (!semver.validRange(cleaned)) {\n throw new Error(`Invalid version range: ${rangeString}`);\n }\n\n return new VersionRange(cleaned);\n }\n\n /**\n * Get the range string\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Check if a version satisfies this range\n */\n public includes(version: Version): boolean {\n return semver.satisfies(version.toString(), this.value);\n }\n\n /**\n * Check if this range is compatible with another range\n */\n public isCompatibleWith(other: VersionRange): boolean {\n // Check if ranges have any overlap\n try {\n return semver.intersects(this.value, other.value);\n } catch {\n return false;\n }\n }\n\n /**\n * Get the minimum version that satisfies this range\n */\n public getMinVersion(): Version | null {\n const minVersion = semver.minVersion(this.value);\n return minVersion ? Version.fromString(minVersion.version) : null;\n }\n\n /**\n * Get the maximum version that satisfies this range\n */\n public getMaxVersion(): Version | null {\n // semver doesn't have a direct maxVersion, so we approximate\n const minVer = this.getMinVersion();\n if (!minVer) return null;\n\n // For caret ranges (^1.2.3), max is < 2.0.0\n if (this.value.startsWith('^')) {\n const major = minVer.getMajor();\n return Version.fromComponents(major + 1, 0, 0);\n }\n\n // For tilde ranges (~1.2.3), max is < 1.3.0\n if (this.value.startsWith('~')) {\n const major = minVer.getMajor();\n const minor = minVer.getMinor();\n return Version.fromComponents(major, minor + 1, 0);\n }\n\n return null;\n }\n\n /**\n * Check if this is a caret range (^x.y.z)\n */\n public isCaret(): boolean {\n return this.value.startsWith('^');\n }\n\n /**\n * Check if this is a tilde range (~x.y.z)\n */\n public isTilde(): boolean {\n return this.value.startsWith('~');\n }\n\n /**\n * Check if this is an exact version\n */\n public isExact(): boolean {\n return (\n !this.value.includes('^') &&\n !this.value.includes('~') &&\n !this.value.includes('>') &&\n !this.value.includes('<') &&\n !this.value.includes('*') &&\n !this.value.includes('x')\n );\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): VersionRange {\n return VersionRange.fromString(json);\n }\n\n /**\n * Check equality with another VersionRange\n */\n public equals(other: VersionRange): boolean {\n return this.value === other.value;\n }\n}\n","/**\n * Configuration System\n *\n * Handles application configuration from multiple sources:\n * - CLI arguments\n * - Configuration files (.pcurc, pcu.config.js)\n * - Environment variables\n * - Default values\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { homedir } from 'os';\nimport { join, resolve } from 'path';\n\nexport interface PcuConfig {\n // Registry settings\n registry: {\n url: string;\n timeout: number;\n retries: number;\n cache: boolean;\n cacheTtl: number; // TTL in seconds\n };\n\n // Update behavior\n update: {\n target: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n includePrerelease: boolean;\n interactive: boolean;\n createBackup: boolean;\n force: boolean;\n };\n\n // Output formatting\n output: {\n format: 'table' | 'json' | 'yaml' | 'minimal';\n color: boolean;\n verbose: boolean;\n silent: boolean;\n };\n\n // Workspace settings\n workspace: {\n autoDetect: boolean;\n patterns: string[];\n excludePatterns: string[];\n };\n\n // Notification settings\n notification: {\n enabled: boolean;\n onSuccess: boolean;\n onError: boolean;\n methods: Array<'console' | 'desktop' | 'webhook'>;\n webhook?: {\n url: string;\n method: 'POST' | 'PUT';\n headers: Record<string, string>;\n };\n };\n\n // Logging\n logging: {\n level: 'error' | 'warn' | 'info' | 'debug';\n file?: string;\n maxSize: string; // e.g., '10MB'\n maxFiles: number;\n };\n}\n\nexport const DEFAULT_CONFIG: PcuConfig = {\n registry: {\n url: 'https://registry.npmjs.org',\n timeout: 30000,\n retries: 3,\n cache: true,\n cacheTtl: 3600, // 1 hour\n },\n\n update: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n createBackup: false,\n force: false,\n },\n\n output: {\n format: 'table',\n color: true,\n verbose: false,\n silent: false,\n },\n\n workspace: {\n autoDetect: true,\n patterns: ['packages/*', 'apps/*'],\n excludePatterns: ['**/node_modules/**', '**/dist/**', '**/build/**'],\n },\n\n notification: {\n enabled: false,\n onSuccess: true,\n onError: true,\n methods: ['console'],\n },\n\n logging: {\n level: 'info',\n maxSize: '10MB',\n maxFiles: 5,\n },\n};\n\nexport class ConfigManager {\n private config: PcuConfig;\n private configPath?: string;\n\n constructor() {\n this.config = { ...DEFAULT_CONFIG };\n this.loadConfig();\n }\n\n /**\n * Get the current configuration\n */\n getConfig(): Readonly<PcuConfig> {\n return this.config;\n }\n\n /**\n * Get a specific configuration value using dot notation\n */\n get<T = any>(path: string): T {\n return this.getNestedValue(this.config, path);\n }\n\n /**\n * Set a configuration value using dot notation\n */\n set(path: string, value: any): void {\n this.setNestedValue(this.config, path, value);\n }\n\n /**\n * Merge configuration from CLI options\n */\n mergeCliOptions(\n options: Partial<{\n registry: string;\n timeout: number;\n target: string;\n prerelease: boolean;\n interactive: boolean;\n dryRun: boolean;\n force: boolean;\n format: string;\n color: boolean;\n verbose: boolean;\n silent: boolean;\n workspace: string;\n include: string[];\n exclude: string[];\n }>\n ): void {\n if (options.registry) {\n this.config.registry.url = options.registry;\n }\n if (options.timeout) {\n this.config.registry.timeout = options.timeout;\n }\n if (options.target) {\n this.config.update.target = options.target as any;\n }\n if (options.prerelease !== undefined) {\n this.config.update.includePrerelease = options.prerelease;\n }\n if (options.interactive !== undefined) {\n this.config.update.interactive = options.interactive;\n }\n if (options.force !== undefined) {\n this.config.update.force = options.force;\n }\n if (options.format) {\n this.config.output.format = options.format as any;\n }\n if (options.color !== undefined) {\n this.config.output.color = options.color;\n }\n if (options.verbose !== undefined) {\n this.config.output.verbose = options.verbose;\n }\n if (options.silent !== undefined) {\n this.config.output.silent = options.silent;\n }\n if (options.include) {\n // Add to existing patterns\n this.config.workspace.patterns.push(...options.include);\n }\n if (options.exclude) {\n // Add to existing exclude patterns\n this.config.workspace.excludePatterns.push(...options.exclude);\n }\n }\n\n /**\n * Load configuration from files and environment\n */\n private loadConfig(): void {\n // Load from files (in order of priority)\n this.loadFromFile(this.findConfigFile());\n\n // Load from environment variables\n this.loadFromEnvironment();\n }\n\n /**\n * Find configuration file\n */\n private findConfigFile(): string | undefined {\n const configNames = ['.pcurc', '.pcurc.json', '.pcurc.js', 'pcu.config.js', 'pcu.config.json'];\n\n // Check current directory\n for (const name of configNames) {\n const filePath = resolve(process.cwd(), name);\n if (existsSync(filePath)) {\n return filePath;\n }\n }\n\n // Check home directory\n for (const name of configNames) {\n const filePath = join(homedir(), name);\n if (existsSync(filePath)) {\n return filePath;\n }\n }\n\n return undefined;\n }\n\n /**\n * Load configuration from file\n */\n private loadFromFile(filePath?: string): void {\n if (!filePath || !existsSync(filePath)) {\n return;\n }\n\n try {\n let fileConfig: Partial<PcuConfig>;\n\n if (filePath.endsWith('.js')) {\n // Dynamic import for ES modules\n delete require.cache[require.resolve(filePath)];\n fileConfig = require(filePath);\n\n // Handle default export\n if (fileConfig && typeof fileConfig === 'object' && 'default' in fileConfig) {\n fileConfig = (fileConfig as any).default;\n }\n } else {\n // JSON file\n const content = readFileSync(filePath, 'utf-8');\n fileConfig = JSON.parse(content);\n }\n\n // Deep merge with current config\n this.config = this.deepMerge(this.config, fileConfig);\n this.configPath = filePath;\n } catch (error) {\n console.warn(`Failed to load config from ${filePath}:`, error);\n }\n }\n\n /**\n * Load configuration from environment variables\n */\n private loadFromEnvironment(): void {\n const envConfig: Partial<PcuConfig> = {};\n\n // Registry settings\n if (process.env.PCU_REGISTRY_URL) {\n envConfig.registry = { ...this.config.registry, url: process.env.PCU_REGISTRY_URL };\n }\n if (process.env.PCU_REGISTRY_TIMEOUT) {\n envConfig.registry = {\n ...(envConfig.registry || this.config.registry),\n timeout: parseInt(process.env.PCU_REGISTRY_TIMEOUT, 10),\n };\n }\n\n // Update settings\n if (process.env.PCU_UPDATE_TARGET) {\n envConfig.update = {\n ...this.config.update,\n target: process.env.PCU_UPDATE_TARGET as any,\n };\n }\n if (process.env.PCU_UPDATE_PRERELEASE) {\n envConfig.update = {\n ...(envConfig.update || this.config.update),\n includePrerelease: process.env.PCU_UPDATE_PRERELEASE === 'true',\n };\n }\n\n // Output settings\n if (process.env.PCU_OUTPUT_FORMAT) {\n envConfig.output = {\n ...this.config.output,\n format: process.env.PCU_OUTPUT_FORMAT as any,\n };\n }\n if (process.env.PCU_OUTPUT_COLOR) {\n envConfig.output = {\n ...(envConfig.output || this.config.output),\n color: process.env.PCU_OUTPUT_COLOR !== 'false',\n };\n }\n\n // Logging settings\n if (process.env.PCU_LOG_LEVEL) {\n envConfig.logging = {\n ...this.config.logging,\n level: process.env.PCU_LOG_LEVEL as any,\n };\n }\n if (process.env.PCU_LOG_FILE) {\n envConfig.logging = {\n ...(envConfig.logging || this.config.logging),\n file: process.env.PCU_LOG_FILE,\n };\n }\n\n // Merge environment config\n this.config = this.deepMerge(this.config, envConfig);\n }\n\n /**\n * Get nested value using dot notation\n */\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n\n /**\n * Set nested value using dot notation (protected against prototype pollution)\n */\n private setNestedValue(obj: any, path: string, value: any): void {\n const keys = path.split('.');\n const lastKey = keys.pop()!;\n\n // Validate that keys don't include prototype pollution attempts\n if (keys.some((key) => key === '__proto__' || key === 'constructor' || key === 'prototype')) {\n throw new Error('Invalid key path: prototype pollution attempt detected');\n }\n\n if (lastKey === '__proto__' || lastKey === 'constructor' || lastKey === 'prototype') {\n throw new Error('Invalid key: prototype pollution attempt detected');\n }\n\n const target = keys.reduce((current, key) => {\n // Additional validation for each key in the path\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n throw new Error(`Invalid key in path: ${key}`);\n }\n\n if (!(key in current)) {\n // Use Object.defineProperty for safer property creation\n Object.defineProperty(current, key, {\n value: Object.create(null),\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n return current[key];\n }, obj);\n\n // Use Object.defineProperty for safer final assignment\n Object.defineProperty(target, lastKey, {\n value: value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n\n /**\n * Deep merge two objects (protected against prototype pollution)\n */\n private deepMerge(target: any, source: any): any {\n if (!source || typeof source !== 'object') {\n return target;\n }\n\n const result = { ...target };\n\n for (const key in source) {\n // Prevent prototype pollution\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n continue;\n }\n\n if (Object.hasOwn(source, key)) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n result[key] = this.deepMerge(target[key] || {}, source[key]);\n } else {\n result[key] = source[key];\n }\n }\n }\n\n return result;\n }\n\n /**\n * Get configuration file path\n */\n getConfigPath(): string | undefined {\n return this.configPath;\n }\n\n /**\n * Validate configuration\n */\n validate(): { isValid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // Validate registry URL\n try {\n new URL(this.config.registry.url);\n } catch {\n errors.push('Invalid registry URL');\n }\n\n // Validate timeout\n if (this.config.registry.timeout <= 0) {\n errors.push('Registry timeout must be positive');\n }\n\n // Validate cache TTL\n if (this.config.registry.cacheTtl <= 0) {\n errors.push('Cache TTL must be positive');\n }\n\n // Validate update target\n const validTargets = ['latest', 'greatest', 'minor', 'patch', 'newest'];\n if (!validTargets.includes(this.config.update.target)) {\n errors.push(`Invalid update target: ${this.config.update.target}`);\n }\n\n // Validate output format\n const validFormats = ['table', 'json', 'yaml', 'minimal'];\n if (!validFormats.includes(this.config.output.format)) {\n errors.push(`Invalid output format: ${this.config.output.format}`);\n }\n\n // Validate log level\n const validLevels = ['error', 'warn', 'info', 'debug'];\n if (!validLevels.includes(this.config.logging.level)) {\n errors.push(`Invalid log level: ${this.config.logging.level}`);\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * Export current configuration to file\n */\n async exportConfig(filePath: string, format: 'json' | 'js' = 'json'): Promise<void> {\n const { writeFile } = await import('fs/promises');\n\n let content: string;\n\n if (format === 'js') {\n content = `module.exports = ${JSON.stringify(this.config, null, 2)};`;\n } else {\n content = JSON.stringify(this.config, null, 2);\n }\n\n await writeFile(filePath, content, 'utf-8');\n }\n}\n\n// Global configuration instance\nlet configInstance: ConfigManager | undefined;\n\n/**\n * Get the global configuration instance\n */\nexport function getConfig(): ConfigManager {\n if (!configInstance) {\n configInstance = new ConfigManager();\n }\n return configInstance;\n}\n\n/**\n * Reset the global configuration instance (useful for testing)\n */\nexport function resetConfig(): void {\n configInstance = undefined;\n}\n","/**\n * PCU Configuration System\n *\n * Defines configuration types and provides default configuration.\n * User configuration can override any part of the default configuration.\n */\n\nexport interface PackageRule {\n patterns: string[];\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n autoUpdate?: boolean;\n requireConfirmation?: boolean;\n groupUpdate?: boolean;\n relatedPackages?: string[]; // 相关包会自动遵循相同的版本策略\n}\n\nexport interface SecurityConfig {\n autoFixVulnerabilities?: boolean;\n allowMajorForSecurity?: boolean;\n notifyOnSecurityUpdate?: boolean;\n}\n\nexport interface DefaultsConfig {\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n includePrerelease?: boolean;\n interactive?: boolean;\n dryRun?: boolean;\n createBackup?: boolean;\n format?: 'table' | 'json' | 'yaml' | 'minimal';\n}\n\nexport interface AdvancedConfig {\n concurrency?: number;\n timeout?: number;\n retries?: number;\n cacheValidityMinutes?: number;\n checkForUpdates?: boolean;\n}\n\nexport interface MonorepoConfig {\n syncVersions?: string[];\n catalogPriority?: string[];\n}\n\nexport interface PackageFilterConfig {\n exclude?: string[];\n include?: string[];\n defaults?: DefaultsConfig;\n packageRules?: PackageRule[];\n security?: SecurityConfig;\n advanced?: AdvancedConfig;\n monorepo?: MonorepoConfig;\n}\n\n/**\n * Default built-in configuration\n */\nexport const DEFAULT_PACKAGE_FILTER_CONFIG: Required<PackageFilterConfig> = {\n exclude: [],\n include: [],\n defaults: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n dryRun: false,\n createBackup: false,\n format: 'table',\n },\n packageRules: [\n // React ecosystem - keep types in sync with main packages\n {\n patterns: ['react', 'react-dom'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: true,\n relatedPackages: ['@types/react', '@types/react-dom'],\n },\n // Vue ecosystem\n {\n patterns: ['vue'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n relatedPackages: ['@vue/compiler-sfc', '@vue/runtime-core'],\n },\n // Node.js types - be conservative\n {\n patterns: ['@types/node'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n },\n // Other type definitions - can update more freely\n {\n patterns: ['@types/*'],\n target: 'latest',\n autoUpdate: true,\n requireConfirmation: false,\n groupUpdate: false,\n },\n // Dev tools - minor updates are usually safe\n {\n patterns: ['eslint*', 'prettier', '@typescript-eslint/*', 'vitest', 'jest'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: false,\n groupUpdate: true,\n },\n // Build tools - be more conservative\n {\n patterns: ['typescript', 'webpack*', 'vite*', 'rollup*'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n },\n ],\n security: {\n autoFixVulnerabilities: true,\n allowMajorForSecurity: true,\n notifyOnSecurityUpdate: false,\n },\n advanced: {\n concurrency: 5,\n timeout: 30000,\n retries: 3,\n cacheValidityMinutes: 60,\n checkForUpdates: true,\n },\n monorepo: {\n syncVersions: [],\n catalogPriority: ['default'],\n },\n};\n\n/**\n * Configuration file names to look for\n */\nexport const CONFIG_FILE_NAMES = ['.pcurc.json', '.pcurc.js', 'pcu.config.json', 'pcu.config.js'];\n","/**\n * Configuration Loader\n *\n * Loads and merges user configuration with default configuration.\n * Supports multiple configuration file formats and locations.\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport {\n CONFIG_FILE_NAMES,\n DEFAULT_PACKAGE_FILTER_CONFIG,\n PackageFilterConfig,\n} from './packageFilterConfig.js';\n\nexport class ConfigLoader {\n private static cache = new Map<string, PackageFilterConfig>();\n\n /**\n * Load configuration from the specified directory\n */\n static loadConfig(workspacePath: string = process.cwd()): PackageFilterConfig {\n const cacheKey = workspacePath;\n if (this.cache.has(cacheKey)) {\n return this.cache.get(cacheKey)!;\n }\n\n const userConfig = this.findAndLoadUserConfig(workspacePath);\n const mergedConfig = this.mergeConfigs(DEFAULT_PACKAGE_FILTER_CONFIG, userConfig || {});\n\n this.cache.set(cacheKey, mergedConfig);\n return mergedConfig;\n }\n\n /**\n * Clear configuration cache\n */\n static clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Find and load user configuration file\n */\n private static findAndLoadUserConfig(workspacePath: string): PackageFilterConfig | null {\n for (const fileName of CONFIG_FILE_NAMES) {\n const configPath = join(workspacePath, fileName);\n if (existsSync(configPath)) {\n try {\n return this.loadConfigFile(configPath);\n } catch (error) {\n console.warn(`Warning: Failed to load config file ${configPath}:`, error);\n continue;\n }\n }\n }\n return null;\n }\n\n /**\n * Load configuration from a specific file\n */\n private static loadConfigFile(configPath: string): PackageFilterConfig {\n const content = readFileSync(configPath, 'utf-8');\n\n if (configPath.endsWith('.json')) {\n return JSON.parse(content) as PackageFilterConfig;\n }\n\n if (configPath.endsWith('.js')) {\n // For JavaScript config files, we would need dynamic import\n // For now, let's focus on JSON support\n throw new Error('JavaScript config files are not yet supported');\n }\n\n throw new Error(`Unsupported config file format: ${configPath}`);\n }\n\n /**\n * Deep merge two configuration objects\n */\n private static mergeConfigs(\n defaultConfig: Required<PackageFilterConfig>,\n userConfig: PackageFilterConfig\n ): PackageFilterConfig {\n const merged: PackageFilterConfig = JSON.parse(JSON.stringify(defaultConfig));\n\n // Merge simple arrays and objects\n if (userConfig.exclude) {\n merged.exclude = [...(merged.exclude || []), ...userConfig.exclude];\n }\n\n if (userConfig.include) {\n merged.include = [...(merged.include || []), ...userConfig.include];\n }\n\n if (userConfig.defaults) {\n merged.defaults = { ...merged.defaults, ...userConfig.defaults };\n }\n\n if (userConfig.security) {\n merged.security = { ...merged.security, ...userConfig.security };\n }\n\n if (userConfig.advanced) {\n merged.advanced = { ...merged.advanced, ...userConfig.advanced };\n }\n\n if (userConfig.monorepo) {\n merged.monorepo = { ...merged.monorepo, ...userConfig.monorepo };\n\n // For arrays in monorepo config, replace rather than merge\n if (userConfig.monorepo.syncVersions) {\n merged.monorepo!.syncVersions = userConfig.monorepo.syncVersions;\n }\n if (userConfig.monorepo.catalogPriority) {\n merged.monorepo!.catalogPriority = userConfig.monorepo.catalogPriority;\n }\n }\n\n // Package rules need special handling - user rules override default rules with same patterns\n if (userConfig.packageRules) {\n const defaultRules = merged.packageRules || [];\n const userRules = userConfig.packageRules;\n\n // Start with default rules, but remove any that would be overridden by user rules\n const filteredDefaultRules = defaultRules.filter(\n (defaultRule) =>\n !userRules.some((userRule) =>\n // Check if any user rule pattern overlaps with this default rule\n userRule.patterns.some((userPattern) =>\n defaultRule.patterns.some(\n (defaultPattern) =>\n userPattern === defaultPattern ||\n (userPattern.includes('*') &&\n this.patternsOverlap(userPattern, defaultPattern)) ||\n (defaultPattern.includes('*') &&\n this.patternsOverlap(defaultPattern, userPattern))\n )\n )\n )\n );\n\n // Combine filtered default rules with user rules (user rules take priority)\n merged.packageRules = [...filteredDefaultRules, ...userRules];\n }\n\n return merged;\n }\n\n /**\n * Get effective configuration for a specific package\n */\n static getPackageConfig(\n packageName: string,\n config: PackageFilterConfig\n ): {\n shouldUpdate: boolean;\n target: string;\n requireConfirmation: boolean;\n autoUpdate: boolean;\n groupUpdate: boolean;\n } {\n // Check if package is explicitly excluded\n if (config.exclude?.some((pattern) => this.matchesPattern(packageName, pattern))) {\n return {\n shouldUpdate: false,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n };\n }\n\n // Check if package is explicitly included (if include list exists)\n if (config.include && config.include.length > 0) {\n const isIncluded = config.include.some((pattern) =>\n this.matchesPattern(packageName, pattern)\n );\n if (!isIncluded) {\n return {\n shouldUpdate: false,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n };\n }\n }\n\n // First check if package is in relatedPackages of any rule (higher priority)\n let matchingRule = config.packageRules?.find((rule) =>\n rule.relatedPackages?.some((relatedPattern) =>\n this.matchesPattern(packageName, relatedPattern)\n )\n );\n\n // If no relatedPackages match, find direct pattern match\n if (!matchingRule) {\n matchingRule = config.packageRules?.find((rule) =>\n rule.patterns.some((pattern) => this.matchesPattern(packageName, pattern))\n );\n }\n\n if (matchingRule) {\n return {\n shouldUpdate: true,\n target: matchingRule.target || config.defaults?.target || 'latest',\n requireConfirmation: matchingRule.requireConfirmation || false,\n autoUpdate: matchingRule.autoUpdate || false,\n groupUpdate: matchingRule.groupUpdate || false,\n };\n }\n\n // Use default configuration\n return {\n shouldUpdate: true,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n };\n }\n\n /**\n * Simple glob pattern matching\n */\n private static matchesPattern(packageName: string, pattern: string): boolean {\n const regexPattern = pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.');\n const regex = new RegExp(`^${regexPattern}$`, 'i');\n return regex.test(packageName);\n }\n\n /**\n * Check if two patterns overlap (one could match packages that the other matches)\n */\n private static patternsOverlap(pattern1: string, pattern2: string): boolean {\n // Simple implementation: check if either pattern would match the other as a package name\n return (\n this.matchesPattern(pattern1.replace(/\\*/g, 'x'), pattern2) ||\n this.matchesPattern(pattern2.replace(/\\*/g, 'x'), pattern1)\n );\n }\n}\n","/**\n * Error Tracker\n *\n * Tracks skipped packages and error statistics for summary reporting.\n */\n\nexport interface SkippedPackage {\n name: string;\n reason: 'not-found' | 'network' | 'empty-version' | 'other';\n originalError?: string;\n}\n\nexport class ErrorTracker {\n private static skippedPackages: SkippedPackage[] = [];\n private static errorCounts = {\n notFound: 0,\n network: 0,\n emptyVersion: 0,\n security: 0,\n other: 0,\n };\n\n /**\n * Track a skipped package\n */\n static trackSkippedPackage(packageName: string, error: Error): void {\n let reason: SkippedPackage['reason'] = 'other';\n\n if (error.message.includes('404') || error.message.includes('Not found')) {\n reason = 'not-found';\n this.errorCounts.notFound++;\n } else if (error.message.includes('Version string cannot be empty')) {\n reason = 'empty-version';\n this.errorCounts.emptyVersion++;\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n reason = 'network';\n this.errorCounts.network++;\n } else {\n this.errorCounts.other++;\n }\n\n this.skippedPackages.push({\n name: packageName,\n reason,\n originalError: error.message,\n });\n }\n\n /**\n * Track a security check failure\n */\n static trackSecurityFailure(): void {\n this.errorCounts.security++;\n }\n\n /**\n * Get skipped packages by reason\n */\n static getSkippedPackages(): {\n notFound: string[];\n network: string[];\n emptyVersion: string[];\n other: string[];\n } {\n const grouped = {\n notFound: this.skippedPackages.filter((p) => p.reason === 'not-found').map((p) => p.name),\n network: this.skippedPackages.filter((p) => p.reason === 'network').map((p) => p.name),\n emptyVersion: this.skippedPackages\n .filter((p) => p.reason === 'empty-version')\n .map((p) => p.name),\n other: this.skippedPackages.filter((p) => p.reason === 'other').map((p) => p.name),\n };\n\n return grouped;\n }\n\n /**\n * Get error statistics\n */\n static getErrorStats(): typeof ErrorTracker.errorCounts {\n return { ...this.errorCounts };\n }\n\n /**\n * Get total skipped count\n */\n static getTotalSkipped(): number {\n return this.skippedPackages.length;\n }\n\n /**\n * Reset all tracking data\n */\n static reset(): void {\n this.skippedPackages = [];\n this.errorCounts = {\n notFound: 0,\n network: 0,\n emptyVersion: 0,\n security: 0,\n other: 0,\n };\n }\n\n /**\n * Get all skipped package details\n */\n static getAllSkippedPackages(): SkippedPackage[] {\n return [...this.skippedPackages];\n }\n}\n","/**\n * Logging System\n *\n * Provides structured logging with multiple output targets and log levels.\n * Integrates with the configuration system for runtime control.\n */\n\nimport { writeFileSync, existsSync, mkdirSync, statSync } from 'fs';\nimport { dirname, resolve } from 'path';\nimport { getConfig } from '../config/config.js';\n\nexport type LogLevel = 'error' | 'warn' | 'info' | 'debug';\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n message: string;\n context?: string;\n data?: any;\n error?: Error;\n}\n\nexport interface LoggerOptions {\n context?: string | undefined;\n level?: LogLevel | undefined;\n file?: string | undefined;\n console?: boolean | undefined;\n json?: boolean | undefined;\n}\n\nexport class Logger {\n private context: string;\n private options: {\n context: string;\n level: LogLevel;\n file: string | undefined;\n console: boolean;\n json: boolean;\n };\n private static instances = new Map<string, Logger>();\n\n private constructor(context: string, options: Partial<LoggerOptions> = {}) {\n this.context = context;\n\n const config = getConfig().getConfig();\n\n this.options = {\n context: options.context || context,\n level: options.level || config.logging.level,\n file: options.file || config.logging.file,\n console: options.console !== undefined ? options.console : !config.output.silent,\n json: options.json || false,\n } as any;\n }\n\n /**\n * Get or create logger instance for a specific context\n */\n static getLogger(context: string, options?: Partial<LoggerOptions>): Logger {\n const key = `${context}:${JSON.stringify(options || {})}`;\n\n if (!Logger.instances.has(key)) {\n Logger.instances.set(key, new Logger(context, options));\n }\n\n return Logger.instances.get(key)!;\n }\n\n /**\n * Create a child logger with additional context\n */\n child(childContext: string, options?: Partial<LoggerOptions>): Logger {\n const fullContext = `${this.context}:${childContext}`;\n return Logger.getLogger(fullContext, { ...this.options, ...options });\n }\n\n /**\n * Log error message\n */\n error(message: string, error?: Error, data?: any): void {\n this.log('error', message, { ...(error && { error }), ...(data && { data }) });\n }\n\n /**\n * Log warning message\n */\n warn(message: string, data?: any): void {\n this.log('warn', message, { data });\n }\n\n /**\n * Log info message\n */\n info(message: string, data?: any): void {\n this.log('info', message, { data });\n }\n\n /**\n * Log debug message\n */\n debug(message: string, data?: any): void {\n this.log('debug', message, { data });\n }\n\n /**\n * Log with specific level\n */\n log(level: LogLevel, message: string, extra: { error?: Error; data?: any } = {}): void {\n if (!this.shouldLog(level)) {\n return;\n }\n\n const entry: LogEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n context: this.context,\n ...extra,\n };\n\n this.writeLog(entry);\n }\n\n /**\n * Check if should log at given level\n */\n private shouldLog(level: LogLevel): boolean {\n const levels: Record<LogLevel, number> = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n };\n\n return levels[level] <= levels[this.options.level];\n }\n\n /**\n * Write log entry to configured outputs\n */\n private writeLog(entry: LogEntry): void {\n // Write to console\n if (this.options.console) {\n this.writeToConsole(entry);\n }\n\n // Write to file\n if (this.options.file) {\n this.writeToFile(entry);\n }\n }\n\n /**\n * Write to console with colors\n */\n private writeToConsole(entry: LogEntry): void {\n const config = getConfig().getConfig();\n const useColors = config.output.color;\n\n let colorFn: (text: string) => string;\n let consoleMethod: 'error' | 'warn' | 'info' | 'log';\n\n if (useColors) {\n // Simple color functions (avoiding external dependencies)\n const colors = {\n error: (text: string) => `\\u001b[31m${text}\\u001b[0m`, // Red\n warn: (text: string) => `\\u001b[33m${text}\\u001b[0m`, // Yellow\n info: (text: string) => `\\u001b[36m${text}\\u001b[0m`, // Cyan\n debug: (text: string) => `\\u001b[90m${text}\\u001b[0m`, // Gray\n };\n colorFn = colors[entry.level];\n consoleMethod = entry.level === 'debug' ? 'log' : entry.level;\n } else {\n colorFn = (text: string) => text;\n consoleMethod = entry.level === 'debug' ? 'log' : entry.level;\n }\n\n const timestamp = new Date(entry.timestamp).toLocaleTimeString();\n const levelStr = entry.level.toUpperCase().padEnd(5);\n const contextStr = entry.context ? `[${entry.context}]` : '';\n\n let logMessage = `${timestamp} ${colorFn(levelStr)} ${contextStr} ${entry.message}`;\n\n // Add data if present and in debug mode\n if (entry.data && entry.level === 'debug') {\n logMessage += `\\n${JSON.stringify(entry.data, null, 2)}`;\n }\n\n // Add error stack if present\n if (entry.error && entry.error.stack) {\n logMessage += `\\n${entry.error.stack}`;\n }\n\n console[consoleMethod](logMessage);\n }\n\n /**\n * Write to file\n */\n private writeToFile(entry: LogEntry): void {\n if (!this.options.file) return;\n\n try {\n const filePath = resolve(this.options.file);\n\n // Ensure directory exists\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n // Check file size and rotate if necessary\n this.rotateLogFile(filePath);\n\n // Format log entry\n let logLine: string;\n\n if (this.options.json) {\n logLine = JSON.stringify(entry) + '\\n';\n } else {\n const timestamp = entry.timestamp;\n const level = entry.level.toUpperCase().padEnd(5);\n const context = entry.context ? `[${entry.context}]` : '';\n\n logLine = `${timestamp} ${level} ${context} ${entry.message}`;\n\n if (entry.data) {\n logLine += ` | Data: ${JSON.stringify(entry.data)}`;\n }\n\n if (entry.error) {\n logLine += ` | Error: ${entry.error.message}`;\n if (entry.error.stack) {\n logLine += `\\n${entry.error.stack}`;\n }\n }\n\n logLine += '\\n';\n }\n\n // Append to file\n writeFileSync(filePath, logLine, { flag: 'a', encoding: 'utf-8' });\n } catch (error) {\n // Fallback to console if file writing fails\n console.error('Failed to write to log file:', error);\n this.writeToConsole(entry);\n }\n }\n\n /**\n * Rotate log file if it exceeds size limit\n */\n private rotateLogFile(filePath: string): void {\n if (!existsSync(filePath)) return;\n\n const config = getConfig().getConfig();\n const maxSize = this.parseSize(config.logging.maxSize);\n const maxFiles = config.logging.maxFiles;\n\n try {\n const stats = statSync(filePath);\n\n if (stats.size < maxSize) {\n return;\n }\n\n // Rotate files\n for (let i = maxFiles - 1; i > 0; i--) {\n const oldFile = `${filePath}.${i}`;\n const newFile = `${filePath}.${i + 1}`;\n\n if (existsSync(oldFile)) {\n if (i === maxFiles - 1) {\n // Delete oldest file\n require('fs').unlinkSync(oldFile);\n } else {\n // Rename file\n require('fs').renameSync(oldFile, newFile);\n }\n }\n }\n\n // Move current file to .1\n require('fs').renameSync(filePath, `${filePath}.1`);\n } catch (error) {\n console.warn('Failed to rotate log file:', error);\n }\n }\n\n /**\n * Parse size string (e.g., '10MB') to bytes\n */\n private parseSize(sizeStr: string): number {\n const units: Record<string, number> = {\n B: 1,\n KB: 1024,\n MB: 1024 * 1024,\n GB: 1024 * 1024 * 1024,\n };\n\n const match = sizeStr.match(/^(\\d+(?:\\.\\d+)?)\\s*([A-Z]+)$/i);\n if (!match) {\n return 10 * 1024 * 1024; // Default to 10MB\n }\n\n const [, size, unit] = match;\n const multiplier = units[unit?.toUpperCase() || ''] || 1;\n\n return Math.floor(parseFloat(size || '0') * multiplier);\n }\n\n /**\n * Set log level for this logger\n */\n setLevel(level: LogLevel): void {\n this.options.level = level;\n }\n\n /**\n * Get current log level\n */\n getLevel(): LogLevel {\n return this.options.level;\n }\n\n /**\n * Enable/disable console output\n */\n setConsole(enabled: boolean): void {\n this.options.console = enabled;\n }\n\n /**\n * Set log file path\n */\n setFile(filePath: string | undefined): void {\n this.options.file = filePath;\n }\n\n /**\n * Create a timer logger for performance measurement\n */\n timer(label: string): () => void {\n const start = Date.now();\n this.debug(`Timer started: ${label}`);\n\n return () => {\n const duration = Date.now() - start;\n this.debug(`Timer finished: ${label} (${duration}ms)`);\n };\n }\n\n /**\n * Clear all logger instances (useful for testing)\n */\n static clearInstances(): void {\n Logger.instances.clear();\n }\n}\n\n// Default logger instance\nexport const logger = Logger.getLogger('pcu');\n\n// Convenience functions\nexport const createLogger = (context: string, options?: Partial<LoggerOptions>) =>\n Logger.getLogger(context, options);\n","/**\n * User-Friendly Error Handler\n *\n * Provides user-friendly error messages instead of exposing technical details.\n * Categorizes errors and provides helpful suggestions where possible.\n */\n\nimport chalk from 'chalk';\nimport { Logger } from '../logger/logger.js';\nimport { ErrorTracker } from './errorTracker.js';\n\nexport interface ErrorContext {\n packageName?: string;\n operation?: string;\n details?: string;\n}\n\nexport interface PackageSuggestion {\n original: string;\n suggestions: string[];\n reason: string;\n}\n\nexport class UserFriendlyErrorHandler {\n private static logger = Logger.getLogger('ErrorHandler');\n\n // Common package name corrections\n private static packageSuggestions: Map<string, string[]> = new Map([\n // Framework packages\n ['sveltekit', ['@sveltejs/kit']],\n ['vue-router', ['vue-router']],\n ['vue-cli', ['@vue/cli']],\n ['angular-cli', ['@angular/cli']],\n ['angular-core', ['@angular/core']],\n ['angular-universal', ['@nguniversal/express-engine', '@angular/universal']],\n ['react-router', ['react-router-dom']],\n ['react-dom', ['react-dom']],\n ['nextjs', ['next']],\n ['nuxtjs', ['nuxt']],\n\n // UI Libraries\n ['material-ui', ['@mui/material', '@material-ui/core']],\n ['mui', ['@mui/material']],\n ['antd', ['antd']],\n ['ant-design', ['antd']],\n ['prime-ng', ['primeng']],\n ['primeng', ['primeng']],\n ['ng-zorro', ['ng-zorro-antd']],\n ['bootstrap-vue', ['bootstrap-vue']],\n ['vuetify', ['vuetify']],\n ['quasar', ['quasar']],\n ['onsen-ui', ['onsenui']],\n ['ionic', ['@ionic/angular', '@ionic/react', '@ionic/vue']],\n\n // CSS Frameworks\n ['tailwindcss', ['tailwindcss']],\n ['tailwind', ['tailwindcss']],\n ['bulma', ['bulma']],\n ['water-css', ['water.css']],\n ['holiday-css', ['@holiday-css/main']],\n ['wing-css', ['@wing-css/wing']],\n ['picnic-css', ['picnicss']],\n\n // Build Tools & Bundlers\n ['webpack', ['webpack']],\n ['webpack-cli', ['webpack-cli']],\n ['rollup', ['rollup']],\n ['vite', ['vite']],\n ['parcel', ['parcel']],\n ['esbuild', ['esbuild']],\n ['swc', ['@swc/core']],\n\n // Testing\n ['jest', ['jest']],\n ['vitest', ['vitest']],\n ['mocha', ['mocha']],\n ['chai', ['chai']],\n ['cypress', ['cypress']],\n ['playwright', ['@playwright/test']],\n ['puppeteer', ['puppeteer']],\n ['selenium', ['selenium-webdriver']],\n ['webdriver', ['selenium-webdriver']],\n ['lambdatest', ['@lambdatest/selenium-webdriver']],\n ['applitools', ['@applitools/eyes-selenium']],\n ['experitest', ['@experitest/seetest-client']],\n ['kobiton', ['@kobiton/api']],\n ['crossbrowsertesting', ['@crossbrowsertesting/selenium']],\n\n // Cloud Services\n ['aws-sdk', ['@aws-sdk/client-s3', 'aws-sdk']],\n ['aws-device-farm', ['@aws-sdk/client-device-farm']],\n ['firebase', ['firebase']],\n ['firebase-test-lab', ['@google-cloud/testing']],\n ['azure', ['@azure/storage-blob', '@azure/cosmos']],\n ['azure-devtest-labs', ['@azure/arm-devtestlabs']],\n ['gcp', ['@google-cloud/storage']],\n\n // Databases & ORMs\n ['mongoose', ['mongoose']],\n ['sequelize', ['sequelize']],\n ['typeorm', ['typeorm']],\n ['prisma', ['@prisma/client']],\n ['knex', ['knex']],\n ['pg', ['pg']],\n ['mysql', ['mysql2']],\n ['sqlite', ['sqlite3']],\n ['redis', ['redis']],\n ['mongodb', ['mongodb']],\n\n // Utilities\n ['lodash', ['lodash']],\n ['loadash', ['lodash']],\n ['underscore', ['underscore']],\n ['ramda', ['ramda']],\n ['rxjs', ['rxjs']],\n ['axios', ['axios']],\n ['axois', ['axios']],\n ['fetch', ['node-fetch']],\n ['node-fetch', ['node-fetch']],\n ['request', ['axios', 'node-fetch']],\n ['superagent', ['superagent']],\n\n // Date/Time\n ['moment', ['moment']],\n ['momentjs', ['moment']],\n ['dayjs', ['dayjs']],\n ['date-fns', ['date-fns']],\n ['luxon', ['luxon']],\n\n // Linting & Formatting\n ['eslint', ['eslint']],\n ['prettier', ['prettier']],\n ['tslint', ['@typescript-eslint/eslint-plugin']],\n ['typescript-eslint', ['@typescript-eslint/eslint-plugin', '@typescript-eslint/parser']],\n\n // Type Definitions\n ['types-node', ['@types/node']],\n ['@types-node', ['@types/node']],\n ['types-react', ['@types/react']],\n ['types-express', ['@types/express']],\n\n // Backend Frameworks\n ['express', ['express']],\n ['expressjs', ['express']],\n ['fastify', ['fastify']],\n ['koa', ['koa']],\n ['nestjs', ['@nestjs/core']],\n ['nest', ['@nestjs/core']],\n ['hapi', ['@hapi/hapi']],\n\n // State Management\n ['redux', ['redux']],\n ['mobx', ['mobx']],\n ['vuex', ['vuex']],\n ['pinia', ['pinia']],\n ['zustand', ['zustand']],\n ['recoil', ['recoil']],\n\n // Styling\n ['styled-components', ['styled-components']],\n ['styled-component', ['styled-components']],\n ['emotion', ['@emotion/react']],\n ['sass', ['sass']],\n ['node-sass', ['sass']],\n ['less', ['less']],\n ['stylus', ['stylus']],\n\n // Admin/CMS\n ['forestadmin', ['forest-express', 'forest-express-sequelize']],\n ['strapi', ['@strapi/strapi']],\n ['keystone', ['@keystone-6/core']],\n ['ghost', ['ghost']],\n\n // Documentation\n ['storybook', ['@storybook/react', '@storybook/vue3']],\n ['docusaurus', ['@docusaurus/core']],\n ['gitbook', ['@gitbook/cli']],\n ['typedoc', ['typedoc']],\n\n // Desktop Apps\n ['electron', ['electron']],\n ['tauri', ['@tauri-apps/api']],\n ['nwjs', ['nw']],\n\n // Mobile Development\n ['react-native', ['react-native']],\n ['expo', ['expo']],\n ['cordova', ['cordova']],\n ['phonegap', ['phonegap']],\n\n // Common Misspellings\n ['jquery', ['jquery']],\n ['boostrap', ['bootstrap']],\n ['bootstrap', ['bootstrap']],\n ['fontawesome', ['@fortawesome/fontawesome-free']],\n ['font-awesome', ['@fortawesome/fontawesome-free']],\n\n // Internationalization\n ['react-i18n', ['react-i18next']],\n ['i18n', ['i18next']],\n ['i18next', ['i18next']],\n ['vue-i18n', ['vue-i18n']],\n ['react-intl', ['react-intl']],\n ['intl', ['intl']],\n\n // Data Visualization & Charts\n ['chart', ['chart.js']],\n ['chartjs', ['chart.js']],\n ['chart.js', ['chart.js']],\n ['d3', ['d3']],\n ['d3js', ['d3']],\n ['plotly', ['plotly.js']],\n ['echarts', ['echarts']],\n ['highcharts', ['highcharts']],\n ['recharts', ['recharts']],\n ['victory', ['victory']],\n ['nivo', ['@nivo/core']],\n ['observable', ['@observablehq/plot']],\n\n // Real-time Communication & WebRTC\n ['socket.io', ['socket.io']],\n ['socketio', ['socket.io']],\n ['websocket', ['ws']],\n ['ws', ['ws']],\n ['webrtc', ['simple-peer']],\n ['peer', ['peerjs']],\n ['peerjs', ['peerjs']],\n ['signalr', ['@microsoft/signalr']],\n\n // Blockchain & Web3\n ['web3', ['web3']],\n ['web3js', ['web3']],\n ['ethers', ['ethers']],\n ['ethersjs', ['ethers']],\n ['ethereum', ['web3', 'ethers']],\n ['metamask', ['@metamask/sdk']],\n ['wagmi', ['wagmi']],\n ['rainbow-kit', ['@rainbow-me/rainbowkit']],\n ['wallet-connect', ['@walletconnect/client']],\n\n // Machine Learning & AI\n ['tensorflow', ['@tensorflow/tfjs']],\n ['tensorflowjs', ['@tensorflow/tfjs']],\n ['tfjs', ['@tensorflow/tfjs']],\n ['brain', ['brain.js']],\n ['brainjs', ['brain.js']],\n ['synaptic', ['synaptic']],\n ['ml-matrix', ['ml-matrix']],\n ['opencv', ['opencv4nodejs']],\n\n // Image Processing\n ['sharp', ['sharp']],\n ['jimp', ['jimp']],\n ['canvas', ['canvas']],\n ['fabric', ['fabric']],\n ['fabricjs', ['fabric']],\n ['konva', ['konva']],\n ['konvajs', ['konva']],\n ['p5', ['p5']],\n ['p5js', ['p5']],\n ['three', ['three']],\n ['threejs', ['three']],\n\n // Audio/Video Processing\n ['howler', ['howler']],\n ['howlerjs', ['howler']],\n ['tone', ['tone']],\n ['tonejs', ['tone']],\n ['video', ['video.js']],\n ['videojs', ['video.js']],\n ['hls', ['hls.js']],\n ['hlsjs', ['hls.js']],\n ['dash', ['dashjs']],\n ['dashjs', ['dashjs']],\n\n // Game Development\n ['phaser', ['phaser']],\n ['phaserjs', ['phaser']],\n ['pixijs', ['pixi.js']],\n ['pixi', ['pixi.js']],\n ['babylonjs', ['babylonjs']],\n ['babylon', ['babylonjs']],\n ['aframe', ['aframe']],\n\n // IoT & Hardware\n ['johnny-five', ['johnny-five']],\n ['arduino', ['johnny-five']],\n ['raspberry-pi', ['raspi']],\n ['raspi', ['raspi']],\n ['serialport', ['serialport']],\n ['noble', ['noble']],\n ['bluetooth', ['noble']],\n\n // Progressive Web Apps\n ['workbox', ['workbox-webpack-plugin']],\n ['sw-precache', ['workbox-webpack-plugin']],\n ['service-worker', ['workbox-webpack-plugin']],\n ['pwa', ['workbox-webpack-plugin']],\n\n // Map & Geolocation\n ['leaflet', ['leaflet']],\n ['mapbox', ['mapbox-gl']],\n ['google-maps', ['@googlemaps/js-api-loader']],\n ['googlemaps', ['@googlemaps/js-api-loader']],\n ['openlayers', ['ol']],\n ['ol', ['ol']],\n\n // Animation\n ['gsap', ['gsap']],\n ['anime', ['animejs']],\n ['animejs', ['animejs']],\n ['lottie', ['lottie-web']],\n ['lottie-web', ['lottie-web']],\n ['framer-motion', ['framer-motion']],\n ['react-spring', ['react-spring']],\n\n // Form & Validation\n ['formik', ['formik']],\n ['react-hook-form', ['react-hook-form']],\n ['yup', ['yup']],\n ['joi', ['joi']],\n ['ajv', ['ajv']],\n ['zod', ['zod']],\n ['superstruct', ['superstruct']],\n\n // Editor & Rich Text\n ['quill', ['quill']],\n ['quilljs', ['quill']],\n ['tinymce', ['tinymce']],\n ['ckeditor', ['@ckeditor/ckeditor5-build-classic']],\n ['slate', ['slate']],\n ['slatejs', ['slate']],\n ['draft', ['draft-js']],\n ['draftjs', ['draft-js']],\n ['monaco', ['monaco-editor']],\n ['monaco-editor', ['monaco-editor']],\n\n // HTTP & API\n ['apollo', ['@apollo/client']],\n ['apollo-client', ['@apollo/client']],\n ['graphql', ['graphql']],\n ['relay', ['react-relay']],\n ['urql', ['urql']],\n ['swr', ['swr']],\n ['react-query', ['@tanstack/react-query']],\n ['tanstack-query', ['@tanstack/react-query']],\n\n // More Common Typos\n ['reac', ['react']],\n ['reactjs', ['react']],\n ['veu', ['vue']],\n ['vuejs', ['vue']],\n ['angualr', ['@angular/core']],\n ['svelt', ['svelte']],\n ['sveltte', ['svelte']],\n ['typescirpt', ['typescript']],\n ['typescript', ['typescript']],\n ['javasript', ['node']],\n ['javascript', ['node']],\n\n // DevOps & CI/CD\n ['docker', ['dockerode']],\n ['k8s', ['@kubernetes/client-node']],\n ['kubernetes', ['@kubernetes/client-node']],\n ['kubectl', ['@kubernetes/client-node']],\n ['helm', ['@helm/sdk']],\n ['jenkins', ['jenkins']],\n ['circleci', ['@circleci/circleci-config-sdk']],\n ['github-actions', ['@actions/core', '@actions/github']],\n ['gitlab-ci', ['@gitbeaker/node']],\n ['travis', ['@travis-ci/travis-yml']],\n ['terraform', ['@cdktf/provider-aws']],\n ['ansible', ['@ansible/galaxy']],\n ['vagrant', ['vagrant']],\n ['consul', ['consul']],\n ['vault', ['node-vault']],\n ['nomad', ['nomad-client']],\n\n // 监控和日志\n ['winston', ['winston']],\n ['morgan', ['morgan']],\n ['pino', ['pino']],\n ['bunyan', ['bunyan']],\n ['log4js', ['log4js']],\n ['sentry', ['@sentry/node', '@sentry/react']],\n ['bugsnag', ['@bugsnag/js']],\n ['rollbar', ['rollbar']],\n ['newrelic', ['newrelic']],\n ['datadog', ['@datadog/browser-rum']],\n ['prometheus', ['prom-client']],\n ['grafana', ['@grafana/toolkit']],\n ['elastic', ['@elastic/elasticsearch']],\n ['elasticsearch', ['@elastic/elasticsearch']],\n ['kibana', ['@elastic/kibana-utils']],\n ['logstash', ['@elastic/logstash']],\n\n // 微服务架构\n ['microservices', ['express']],\n ['service-mesh', ['istio']],\n ['envoy', ['envoy']],\n ['istio', ['istio']],\n ['linkerd', ['linkerd']],\n ['consul-connect', ['consul']],\n ['eureka', ['eureka-js-client']],\n ['zookeeper', ['node-zookeeper-client']],\n ['etcd', ['etcd3']],\n ['grpc', ['@grpc/grpc-js']],\n ['protobuf', ['protobufjs']],\n\n // 缓存系统\n ['redis', ['redis']],\n ['memcached', ['memcached']],\n ['node-cache', ['node-cache']],\n ['memory-cache', ['memory-cache']],\n ['lru-cache', ['lru-cache']],\n ['cache-manager', ['cache-manager']],\n ['ioredis', ['ioredis']],\n ['hazelcast', ['hazelcast-client']],\n\n // 消息队列\n ['rabbitmq', ['amqplib']],\n ['kafka', ['kafkajs']],\n ['apache-kafka', ['kafkajs']],\n ['bull', ['bull']],\n ['bullmq', ['bullmq']],\n ['bee-queue', ['bee-queue']],\n ['kue', ['kue']],\n ['agenda', ['agenda']],\n ['amqp', ['amqplib']],\n ['mqtt', ['mqtt']],\n ['nats', ['nats']],\n ['zeromq', ['zeromq']],\n ['zmq', ['zeromq']],\n\n // 搜索引擎\n ['solr', ['solr-client']],\n ['algolia', ['algoliasearch']],\n ['sphinx', ['sphinxapi']],\n ['lucene', ['lucene']],\n ['whoosh', ['whoosh']],\n ['meilisearch', ['meilisearch']],\n ['typesense', ['typesense']],\n\n // 文件上传处理\n ['multer', ['multer']],\n ['formidable', ['formidable']],\n ['busboy', ['busboy']],\n ['multiparty', ['multiparty']],\n ['file-upload', ['express-fileupload']],\n ['cloudinary', ['cloudinary']],\n ['aws-s3', ['@aws-sdk/client-s3']],\n\n // 加密和安全\n ['bcrypt', ['bcrypt']],\n ['bcryptjs', ['bcryptjs']],\n ['crypto', ['crypto-js']],\n ['crypto-js', ['crypto-js']],\n ['jsonwebtoken', ['jsonwebtoken']],\n ['jwt', ['jsonwebtoken']],\n ['passport', ['passport']],\n ['helmet', ['helmet']],\n ['cors', ['cors']],\n ['express-rate-limit', ['express-rate-limit']],\n ['rate-limiter', ['express-rate-limit']],\n ['argon2', ['argon2']],\n ['scrypt', ['scrypt']],\n ['node-rsa', ['node-rsa']],\n ['speakeasy', ['speakeasy']],\n ['otplib', ['otplib']],\n\n // 邮件服务\n ['nodemailer', ['nodemailer']],\n ['sendgrid', ['@sendgrid/mail']],\n ['mailgun', ['mailgun.js']],\n ['ses', ['@aws-sdk/client-ses']],\n ['postmark', ['postmark']],\n ['sparkpost', ['sparkpost']],\n ['mandrill', ['mandrill-api']],\n ['mailchimp', ['@mailchimp/mailchimp_marketing']],\n ['email-templates', ['email-templates']],\n\n // 模板引擎\n ['handlebars', ['handlebars']],\n ['hbs', ['hbs']],\n ['mustache', ['mustache']],\n ['pug', ['pug']],\n ['jade', ['pug']], // jade was renamed to pug\n ['ejs', ['ejs']],\n ['nunjucks', ['nunjucks']],\n ['twig', ['twig']],\n ['dust', ['dustjs-linkedin']],\n\n // Serverless框架\n ['serverless', ['serverless']],\n ['sls', ['serverless']],\n ['lambda', ['aws-lambda']],\n ['azure-functions', ['@azure/functions']],\n ['google-functions', ['@google-cloud/functions-framework']],\n ['netlify-lambda', ['netlify-lambda']],\n ['vercel', ['@vercel/node']],\n ['claudia', ['claudia']],\n ['apex', ['apex']],\n ['sam', ['@aws-cdk/aws-sam']],\n\n // 更多数据库\n ['couchdb', ['nano']],\n ['pouchdb', ['pouchdb']],\n ['neo4j', ['neo4j-driver']],\n ['influxdb', ['influx']],\n ['cassandra', ['cassandra-driver']],\n ['rethinkdb', ['rethinkdb']],\n ['orientdb', ['orientjs']],\n ['arangodb', ['arangojs']],\n ['leveldb', ['level']],\n ['rocksdb', ['rocksdb']],\n ['sqlite', ['sqlite3', 'better-sqlite3']],\n ['mariadb', ['mariadb']],\n ['cockroachdb', ['pg']], // uses pg driver\n\n // 更多云服务\n ['heroku', ['heroku']],\n ['digitalocean', ['@digitalocean/droplet-api']],\n ['linode', ['@linode/api-v4']],\n ['vultr', ['@vultr/vultr-node']],\n ['scaleway', ['@scaleway/sdk']],\n ['ovh', ['ovh']],\n ['cloudflare', ['cloudflare']],\n ['fastly', ['fastly']],\n ['maxcdn', ['maxcdn']],\n ['bunnycdn', ['bunnycdn']],\n\n // 性能分析和优化\n ['lighthouse', ['lighthouse']],\n ['webpagetest', ['webpagetest']],\n ['clinic', ['clinic']],\n ['0x', ['0x']],\n ['autocannon', ['autocannon']],\n ['loadtest', ['loadtest']],\n ['artillery', ['artillery']],\n ['k6', ['k6']],\n ['benchmark', ['benchmark']],\n ['clinic.js', ['clinic']],\n\n // 更多拼写错误和变体\n ['expressjs', ['express']],\n ['node.js', ['node']],\n ['nodejs', ['node']],\n ['npm', ['npm']],\n ['yarn', ['yarn']],\n ['pnpm', ['pnpm']],\n ['bun', ['bun']],\n ['deno', ['deno']],\n ['typescript', ['typescript']],\n ['js', ['javascript']],\n ['ts', ['typescript']],\n ['html', ['html']],\n ['css', ['css']],\n ['json', ['json']],\n ['xml', ['xml2js']],\n ['yaml', ['yaml']],\n ['toml', ['@iarna/toml']],\n ['ini', ['ini']],\n ['csv', ['csv-parser', 'papaparse']],\n ['pdf', ['pdf2pic', 'pdfkit']],\n ['excel', ['xlsx']],\n ['word', ['mammoth']],\n ['zip', ['node-zip']],\n ['tar', ['tar']],\n ['gzip', ['zlib']],\n\n // 数据处理和转换\n ['cheerio', ['cheerio']],\n ['jsdom', ['jsdom']],\n ['xml2js', ['xml2js']],\n ['csv-parse', ['csv-parse']],\n ['papaparse', ['papaparse']],\n ['fast-csv', ['fast-csv']],\n ['xlsx', ['xlsx']],\n ['pdfkit', ['pdfkit']],\n ['jspdf', ['jspdf']],\n ['mammoth', ['mammoth']],\n ['pdf-parse', ['pdf-parse']],\n\n // CLI工具\n ['commander', ['commander']],\n ['yargs', ['yargs']],\n ['inquirer', ['inquirer']],\n ['chalk', ['chalk']],\n ['ora', ['ora']],\n ['cli-progress', ['cli-progress']],\n ['figlet', ['figlet']],\n ['boxen', ['boxen']],\n ['update-notifier', ['update-notifier']],\n ['meow', ['meow']],\n ['arg', ['arg']],\n ['minimist', ['minimist']],\n ]);\n\n /**\n * Handle package not found errors (404)\n */\n static handlePackageNotFound(packageName: string, context?: ErrorContext): void {\n const suggestions = this.packageSuggestions.get(packageName);\n\n if (suggestions && suggestions.length > 0) {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 不存在`));\n console.log(chalk.cyan(`💡 可能的正确包名:`));\n suggestions.forEach((suggestion) => {\n console.log(chalk.cyan(` • ${suggestion}`));\n });\n } else {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 在 npm registry 中不存在`));\n console.log(chalk.cyan(`💡 请检查包名是否正确,或者该包可能已被移除`));\n }\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, new Error('Package not found (404)'));\n\n // Log technical details for debugging\n this.logger.debug('Package not found', { packageName, context });\n }\n\n /**\n * Handle empty version errors\n */\n static handleEmptyVersion(packageName: string, context?: ErrorContext): void {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 的版本信息为空`));\n console.log(chalk.cyan(`💡 这可能是由于:`));\n console.log(chalk.cyan(` • 包的 package.json 配置问题`));\n console.log(chalk.cyan(` • catalog 配置中的版本格式错误`));\n console.log(chalk.cyan(` • npm registry 数据同步问题`));\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, new Error('Version string cannot be empty'));\n\n this.logger.debug('Empty version string', { packageName, context });\n }\n\n /**\n * Handle network/timeout errors\n */\n static handleNetworkError(packageName: string, error: Error, context?: ErrorContext): void {\n console.log(chalk.yellow(`⚠️ 检查包 \"${packageName}\" 时遇到网络问题`));\n console.log(chalk.cyan(`💡 请稍后重试,或检查网络连接`));\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, error);\n\n this.logger.debug('Network error', { packageName, error: error.message, context });\n }\n\n /**\n * Handle security check failures\n */\n static handleSecurityCheckFailure(\n packageName: string,\n error: Error,\n context?: ErrorContext\n ): void {\n // Track for statistics\n ErrorTracker.trackSecurityFailure();\n\n // Only show user-friendly message, don't expose technical details\n this.logger.debug(`Security check failed for ${packageName}`, {\n error: error.message,\n context,\n });\n\n // Don't spam the user with security check failures unless it's critical\n if (context?.operation === 'update' || context?.operation === 'security-audit') {\n console.log(chalk.yellow(`⚠️ 无法检查 \"${packageName}\" 的安全状态`));\n }\n }\n\n /**\n * Handle retry attempts silently\n */\n static handleRetryAttempt(\n packageName: string,\n attempt: number,\n maxRetries: number,\n error: Error\n ): void {\n // Log for debugging but don't spam users\n this.logger.debug(`Retry attempt ${attempt}/${maxRetries} for ${packageName}`, {\n error: error.message,\n });\n\n // Only show to user on final failure\n if (attempt === maxRetries) {\n this.handleFinalFailure(packageName, error);\n }\n }\n\n /**\n * Handle final failure after retries\n */\n static handleFinalFailure(packageName: string, error: Error): void {\n if (error.message.includes('404') || error.message.includes('Not found')) {\n this.handlePackageNotFound(packageName);\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n this.handleNetworkError(packageName, error);\n } else if (error.message.includes('Version string cannot be empty')) {\n this.handleEmptyVersion(packageName);\n } else {\n // Generic error handling\n console.log(chalk.yellow(`⚠️ 跳过包 \"${packageName}\" (检查失败)`));\n this.logger.debug('Package check failed', { packageName, error: error.message });\n }\n }\n\n /**\n * Handle general package query failures\n */\n static handlePackageQueryFailure(\n packageName: string,\n error: Error,\n context?: ErrorContext\n ): void {\n // Categorize the error and provide appropriate user message\n if (error.message.includes('404') || error.message.includes('Not found')) {\n this.handlePackageNotFound(packageName, context);\n } else if (error.message.includes('Version string cannot be empty')) {\n this.handleEmptyVersion(packageName, context);\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n this.handleNetworkError(packageName, error, context);\n } else {\n // For other errors, just skip silently and log for debugging\n ErrorTracker.trackSkippedPackage(packageName, error);\n this.logger.debug(`Package query failed for ${packageName}`, {\n error: error.message,\n context,\n });\n }\n }\n\n /**\n * Show summary of skipped packages\n */\n static showSkippedPackagesSummary(): void {\n const totalSkipped = ErrorTracker.getTotalSkipped();\n if (totalSkipped === 0) return;\n\n console.log();\n console.log(chalk.cyan(`📋 跳过了 ${totalSkipped} 个包的检查:`));\n\n const grouped = ErrorTracker.getSkippedPackages();\n\n if (grouped.notFound.length > 0) {\n console.log(\n chalk.yellow(` 不存在的包 (${grouped.notFound.length}): ${grouped.notFound.join(', ')}`)\n );\n }\n\n if (grouped.emptyVersion.length > 0) {\n console.log(\n chalk.yellow(\n ` 版本信息为空 (${grouped.emptyVersion.length}): ${grouped.emptyVersion.join(', ')}`\n )\n );\n }\n\n if (grouped.network.length > 0) {\n console.log(\n chalk.yellow(` 网络问题 (${grouped.network.length}): ${grouped.network.join(', ')}`)\n );\n }\n\n if (grouped.other.length > 0) {\n console.log(\n chalk.yellow(` 其他问题 (${grouped.other.length}): ${grouped.other.join(', ')}`)\n );\n }\n\n const stats = ErrorTracker.getErrorStats();\n if (stats.security > 0) {\n console.log(chalk.gray(` 安全检查失败: ${stats.security} 次`));\n }\n }\n\n /**\n * Get statistics for reporting\n */\n static getStatistics(): {\n totalSkipped: number;\n errorBreakdown: ReturnType<typeof ErrorTracker.getErrorStats>;\n skippedPackages: ReturnType<typeof ErrorTracker.getSkippedPackages>;\n } {\n return {\n totalSkipped: ErrorTracker.getTotalSkipped(),\n errorBreakdown: ErrorTracker.getErrorStats(),\n skippedPackages: ErrorTracker.getSkippedPackages(),\n };\n }\n\n /**\n * Reset error tracking (useful for testing)\n */\n static resetTracking(): void {\n ErrorTracker.reset();\n }\n\n /**\n * Add a new package suggestion\n */\n static addPackageSuggestion(originalName: string, suggestions: string[]): void {\n this.packageSuggestions.set(originalName, suggestions);\n }\n\n /**\n * Get suggestions for a package name\n */\n static getPackageSuggestions(packageName: string): string[] {\n return this.packageSuggestions.get(packageName) || [];\n }\n}\n","/**\n * Version Checker Utility\n *\n * Checks for newer versions of the PCU tool and provides update prompts.\n */\n\nimport chalk from 'chalk';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n// InteractivePrompts removed - prompting should be handled by CLI layer\n\nconst execAsync = promisify(exec);\n\nexport interface VersionCheckResult {\n isLatest: boolean;\n currentVersion: string;\n latestVersion: string;\n shouldPrompt: boolean;\n}\n\nexport interface VersionCheckOptions {\n skipPrompt?: boolean;\n timeout?: number;\n packageName?: string;\n}\n\nexport class VersionChecker {\n private static readonly DEFAULT_TIMEOUT = 5000; // 5 seconds\n private static readonly DEFAULT_PACKAGE = 'pnpm-catalog-updates';\n\n /**\n * Check if current version is the latest\n */\n static async checkVersion(\n currentVersion: string,\n options: VersionCheckOptions = {}\n ): Promise<VersionCheckResult> {\n const {\n skipPrompt = false,\n timeout = this.DEFAULT_TIMEOUT,\n packageName = this.DEFAULT_PACKAGE,\n } = options;\n\n try {\n // Get latest version from npm with timeout\n const latestVersion = await this.getLatestVersion(packageName, timeout);\n\n const isLatest = this.compareVersions(currentVersion, latestVersion) >= 0;\n\n return {\n isLatest,\n currentVersion,\n latestVersion,\n shouldPrompt: !isLatest && !skipPrompt,\n };\n } catch (error) {\n console.warn(chalk.yellow('⚠️ Failed to check for updates:'), error);\n return {\n isLatest: true, // Assume latest if check fails\n currentVersion,\n latestVersion: currentVersion,\n shouldPrompt: false,\n };\n }\n }\n\n /**\n * Display update notification (prompting should be handled by CLI layer)\n */\n static displayUpdateNotification(versionResult: VersionCheckResult): void {\n if (!versionResult.shouldPrompt) {\n return;\n }\n\n console.log();\n console.log(chalk.cyan('📦 Update Available!'));\n console.log(\n chalk.gray(\n `Current version: ${versionResult.currentVersion} → Latest: ${versionResult.latestVersion}`\n )\n );\n console.log(chalk.gray('Run with --update flag to update to the latest version.'));\n console.log();\n }\n\n /**\n * Prompt user and update if they choose to\n */\n static async promptAndUpdate(versionResult: VersionCheckResult): Promise<boolean> {\n if (!versionResult.shouldPrompt) {\n return false;\n }\n\n try {\n // For now, just display notification and don't prompt\n // This avoids adding inquirer dependency to utils package\n this.displayUpdateNotification(versionResult);\n\n // Auto-perform update for now (can be enhanced with prompting later)\n console.log(chalk.yellow('Auto-updating to latest version...'));\n return await this.performUpdateAction();\n } catch (error) {\n console.error(chalk.red('Failed to prompt and update:'), error);\n return false;\n }\n }\n\n /**\n * Perform update without prompting\n */\n static async performUpdateAction(): Promise<boolean> {\n console.log(chalk.blue('🔄 Updating pnpm-catalog-updates...'));\n try {\n await this.performUpdate();\n console.log(chalk.green('✅ Successfully updated! Please restart the command.'));\n return true;\n } catch (error) {\n console.error(chalk.red('❌ Update failed:'), error);\n console.log(\n chalk.gray('You can manually update with: npm install -g pnpm-catalog-updates@latest')\n );\n return false;\n }\n }\n\n /**\n * Get latest version from npm registry\n */\n private static async getLatestVersion(packageName: string, timeout: number): Promise<string> {\n const command = `npm view ${packageName} version`;\n\n try {\n const { stdout } = await this.executeWithTimeout(command, timeout);\n return stdout.trim();\n } catch (error) {\n // Fallback: try with different npm commands\n try {\n const { stdout } = await this.executeWithTimeout(\n `npm info ${packageName} version`,\n timeout\n );\n return stdout.trim();\n } catch (fallbackError) {\n throw new Error(`Failed to get latest version: ${error}`);\n }\n }\n }\n\n /**\n * Execute update command\n */\n private static async performUpdate(): Promise<void> {\n // Try global update first, then fallback to different methods\n const commands = [\n 'npm install -g pnpm-catalog-updates@latest',\n 'npm update -g pnpm-catalog-updates',\n 'pnpm add -g pnpm-catalog-updates@latest',\n 'yarn global add pnpm-catalog-updates@latest',\n ];\n\n for (const command of commands) {\n try {\n console.log(chalk.gray(`Executing: ${command}`));\n await execAsync(command, { timeout: 30000 });\n return; // Success\n } catch (error) {\n console.warn(chalk.yellow(`Command failed: ${command}`));\n // Continue to next command\n }\n }\n\n throw new Error('All update commands failed');\n }\n\n /**\n * Execute command with timeout\n */\n private static async executeWithTimeout(\n command: string,\n timeout: number\n ): Promise<{ stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n const child = exec(command, { timeout }, (error, stdout, stderr) => {\n if (error) {\n reject(error);\n } else {\n resolve({ stdout, stderr });\n }\n });\n\n // Additional timeout handling\n const timer = setTimeout(() => {\n child.kill();\n reject(new Error(`Command timed out after ${timeout}ms`));\n }, timeout);\n\n child.on('exit', () => {\n clearTimeout(timer);\n });\n });\n }\n\n /**\n * Compare two version strings\n * Returns: -1 if a < b, 0 if a === b, 1 if a > b\n */\n private static compareVersions(a: string, b: string): number {\n const cleanA = a.replace(/^v/, '').replace(/[^0-9.]/g, '');\n const cleanB = b.replace(/^v/, '').replace(/[^0-9.]/g, '');\n\n const partsA = cleanA.split('.').map(Number);\n const partsB = cleanB.split('.').map(Number);\n\n const maxLength = Math.max(partsA.length, partsB.length);\n\n for (let i = 0; i < maxLength; i++) {\n const partA = partsA[i] || 0;\n const partB = partsB[i] || 0;\n\n if (partA < partB) return -1;\n if (partA > partB) return 1;\n }\n\n return 0;\n }\n\n /**\n * Check if running in CI environment where prompts should be skipped\n */\n static isCI(): boolean {\n return !!(\n process.env.CI ||\n process.env.CONTINUOUS_INTEGRATION ||\n process.env.BUILD_NUMBER ||\n process.env.RUN_ID ||\n process.env.GITHUB_ACTIONS\n );\n }\n\n /**\n * Get update frequency preference from environment\n */\n static shouldCheckForUpdates(): boolean {\n const skipCheck = process.env.PCU_SKIP_VERSION_CHECK;\n if (skipCheck === 'true' || skipCheck === '1') {\n return false;\n }\n\n // Skip in CI environments by default\n if (this.isCI()) {\n return false;\n }\n\n return true;\n }\n}\n","/**\n * NPM/PNPM Configuration Parser\n *\n * Reads and parses .npmrc and .pnpmrc configuration files to extract registry settings\n * for different package scopes. Supports both npm and pnpm configuration formats.\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\n\nexport interface NpmrcConfig {\n // Default registry\n registry: string;\n // Scoped registries (e.g., @mycompany -> https://npm.mycompany.com)\n scopedRegistries: Map<string, string>;\n // Auth tokens for registries\n authTokens: Map<string, string>;\n // Other npm config values\n config: Map<string, string>;\n}\n\nexport class NpmrcParser {\n private static readonly DEFAULT_REGISTRY = 'https://registry.npmjs.org/';\n\n /**\n * Parse .npmrc/.pnpmrc configuration from multiple sources\n */\n static parse(\n workingDirectory: string = process.cwd(),\n includeGlobal: boolean = true\n ): NpmrcConfig {\n const config: NpmrcConfig = {\n registry: this.DEFAULT_REGISTRY,\n scopedRegistries: new Map(),\n authTokens: new Map(),\n config: new Map(),\n };\n\n // Load config files in order of precedence (later files override earlier)\n // Priority: project .pnpmrc > project .npmrc > global .pnpmrc > global .npmrc\n const configPaths: string[] = [];\n\n // Only include global configs if requested (for production use)\n if (includeGlobal) {\n configPaths.push(join(homedir(), '.npmrc')); // Global npmrc (lowest priority)\n configPaths.push(join(homedir(), '.pnpmrc')); // Global pnpmrc\n }\n\n configPaths.push(join(workingDirectory, '.npmrc')); // Project npmrc\n configPaths.push(join(workingDirectory, '.pnpmrc')); // Project pnpmrc (highest priority)\n\n for (const configPath of configPaths) {\n if (existsSync(configPath)) {\n this.parseFile(configPath, config);\n }\n }\n\n // Also check for environment variables (skip in tests if includeGlobal is false)\n this.parseEnvironment(config, includeGlobal);\n\n return config;\n }\n\n /**\n * Parse a single .npmrc file\n */\n private static parseFile(filepath: string, config: NpmrcConfig): void {\n try {\n const content = readFileSync(filepath, 'utf-8');\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n // Skip comments and empty lines\n if (!trimmedLine || trimmedLine.startsWith('#') || trimmedLine.startsWith(';')) {\n continue;\n }\n\n // Parse key=value pairs\n const separatorIndex = trimmedLine.indexOf('=');\n if (separatorIndex === -1) continue;\n\n const key = trimmedLine.substring(0, separatorIndex).trim();\n const value = trimmedLine.substring(separatorIndex + 1).trim();\n\n // Handle scoped registries (e.g., @mycompany:registry=https://npm.mycompany.com/)\n if (key.includes(':registry')) {\n const scope = key.replace(':registry', '');\n config.scopedRegistries.set(scope, this.normalizeRegistryUrl(value));\n }\n // Handle default registry\n else if (key === 'registry') {\n config.registry = this.normalizeRegistryUrl(value);\n }\n // Handle auth tokens (e.g., //registry.npmjs.org/:_authToken=...)\n else if (key.includes(':_authToken') || key.includes('_authToken')) {\n // Extract registry URL from the key\n const match = key.match(/\\/\\/(.*?)\\/:/);\n if (match && match[1]) {\n const registryHost = match[1];\n config.authTokens.set(registryHost, value);\n }\n }\n // Store other config values\n else {\n config.config.set(key, value);\n }\n }\n } catch (error) {\n // Silently ignore errors reading npmrc files\n console.debug(`Failed to parse npmrc file ${filepath}:`, error);\n }\n }\n\n /**\n * Parse npm configuration from environment variables\n */\n private static parseEnvironment(config: NpmrcConfig, includeEnv: boolean = true): void {\n if (!includeEnv) {\n return; // Skip environment parsing in tests\n }\n\n // Check for npm_config_registry\n if (process.env.npm_config_registry) {\n config.registry = this.normalizeRegistryUrl(process.env.npm_config_registry);\n }\n\n // Check for scoped registries in environment\n for (const [key, value] of Object.entries(process.env)) {\n if (key.startsWith('npm_config_') && key.includes('_registry')) {\n // Extract scope from environment variable name\n // e.g., npm_config_@mycompany_registry -> @mycompany\n const match = key.match(/npm_config_(.+)_registry/);\n if (match && match[1] && value) {\n const scope = match[1].replace(/_/g, '/').replace(/\\//, '@');\n config.scopedRegistries.set(scope, this.normalizeRegistryUrl(value));\n }\n }\n }\n }\n\n /**\n * Get the appropriate registry URL for a package\n */\n static getRegistryForPackage(packageName: string, config: NpmrcConfig): string {\n // Check if package has a scope (e.g., @mycompany/package)\n if (packageName.startsWith('@')) {\n const scopeEnd = packageName.indexOf('/');\n if (scopeEnd !== -1) {\n const scope = packageName.substring(0, scopeEnd);\n\n // Check if we have a scoped registry for this scope\n const scopedRegistry = config.scopedRegistries.get(scope);\n if (scopedRegistry) {\n return scopedRegistry;\n }\n }\n }\n\n // Fall back to default registry\n return config.registry;\n }\n\n /**\n * Normalize registry URL to ensure it has a trailing slash\n */\n private static normalizeRegistryUrl(url: string): string {\n // Remove any quotes that might be in the config\n url = url.replace(/^[\"']|[\"']$/g, '');\n\n // Ensure trailing slash\n if (!url.endsWith('/')) {\n url += '/';\n }\n\n return url;\n }\n\n /**\n * Get auth token for a registry\n */\n static getAuthToken(registryUrl: string, config: NpmrcConfig): string | undefined {\n try {\n const url = new URL(registryUrl);\n return config.authTokens.get(url.hostname);\n } catch {\n return undefined;\n }\n }\n}\n","/**\n * NPM Registry Service\n *\n * Provides access to NPM registry for package version information.\n * Handles API calls, caching, and version resolution.\n */\n\nimport npmRegistryFetch from 'npm-registry-fetch';\nimport pacote from 'pacote';\nimport semver from 'semver';\n\nimport { Version, VersionRange } from '../../domain/value-objects/version.js';\nimport { AdvancedConfig } from '@pcu/utils';\nimport { UserFriendlyErrorHandler } from '@pcu/utils';\nimport { NpmrcParser, NpmrcConfig } from '../utils/npmrcParser.js';\n\nexport interface PackageInfo {\n name: string;\n description?: string;\n homepage?: string;\n repository?: {\n type?: string;\n url?: string;\n directory?: string;\n };\n license?: string;\n author?: string | { name: string; email?: string };\n maintainers?: Array<{ name: string; email?: string }>;\n keywords?: string[];\n versions: string[];\n latestVersion: string;\n tags: Record<string, string>;\n time?: Record<string, string>;\n}\n\nexport interface SecurityVulnerability {\n id: string;\n title: string;\n severity: 'low' | 'moderate' | 'high' | 'critical';\n description: string;\n reference: string;\n vulnerable_versions: string;\n patched_versions?: string;\n recommendation?: string;\n}\n\nexport interface SecurityReport {\n package: string;\n version: string;\n vulnerabilities: SecurityVulnerability[];\n hasVulnerabilities: boolean;\n}\n\nexport class NpmRegistryService {\n private readonly cache: Map<string, { data: any; timestamp: number }> = new Map();\n\n // Differentiated cache timeouts for different data types\n private readonly versionCacheTimeout: number;\n private readonly packageInfoCacheTimeout: number;\n private readonly securityCacheTimeout: number;\n\n // Advanced configuration with defaults\n private readonly concurrency: number;\n private readonly timeout: number;\n private readonly retries: number;\n private readonly cachingEnabled: boolean;\n\n // NPM configuration for handling multiple registries\n private readonly npmrcConfig: NpmrcConfig;\n\n constructor(\n registryUrl: string = 'https://registry.npmjs.org/',\n options: AdvancedConfig = {},\n workingDirectory: string = process.cwd()\n ) {\n // Parse npmrc configuration for scoped registries\n this.npmrcConfig = NpmrcParser.parse(workingDirectory);\n\n // Override default registry if specified in npmrc\n if (!registryUrl || registryUrl === 'https://registry.npmjs.org/') {\n // Use npmrc registry as default if no specific registry is provided\n const normalizedUrl = registryUrl.endsWith('/') ? registryUrl : registryUrl + '/';\n this.npmrcConfig.registry = this.npmrcConfig.registry || normalizedUrl;\n } else {\n // Use the provided registry URL as override\n this.npmrcConfig.registry = registryUrl.endsWith('/') ? registryUrl : registryUrl + '/';\n }\n this.concurrency = options.concurrency ?? 8; // Increased from 5 to match NCU performance\n this.timeout = options.timeout ?? 15000; // Reduced from 30s to 15s for faster failure detection\n this.retries = options.retries ?? 2; // Reduced from 3 to 2 for faster overall performance\n\n // Optimized cache timeouts for different data types\n const baseCacheMinutes = options.cacheValidityMinutes ?? 10; // Reduced from 60 to 10 minutes\n this.versionCacheTimeout = baseCacheMinutes * 60 * 1000; // Version info: 10 minutes (frequently checked)\n this.packageInfoCacheTimeout = baseCacheMinutes * 2 * 60 * 1000; // Package info: 20 minutes\n this.securityCacheTimeout = baseCacheMinutes * 6 * 60 * 1000; // Security info: 60 minutes (changes less frequently)\n\n this.cachingEnabled = baseCacheMinutes > 0; // Disable caching if set to 0\n }\n\n /**\n * Execute a function with retry logic\n */\n private async executeWithRetry<T>(\n fn: () => Promise<T>,\n context: string = 'operation'\n ): Promise<T> {\n let lastError: Error;\n\n for (let attempt = 1; attempt <= this.retries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (attempt === this.retries) {\n throw new Error(`${context} failed after ${this.retries} attempts: ${lastError.message}`);\n }\n\n // Exponential backoff: wait 1s, 2s, 4s, etc.\n const delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);\n await new Promise((resolve) => setTimeout(resolve, delay));\n\n // Extract package name from context for better error handling\n const packageName = context.includes('for ')\n ? context.split('for ')[1] || 'unknown package'\n : 'unknown package';\n\n UserFriendlyErrorHandler.handleRetryAttempt(packageName, attempt, this.retries, lastError);\n }\n }\n\n throw lastError!;\n }\n\n /**\n * Get the appropriate registry URL for a package\n */\n private getRegistryForPackage(packageName: string): string {\n return NpmrcParser.getRegistryForPackage(packageName, this.npmrcConfig);\n }\n\n /**\n * Get auth configuration for a registry\n */\n private getAuthConfig(registryUrl: string): Record<string, any> {\n const authToken = NpmrcParser.getAuthToken(registryUrl, this.npmrcConfig);\n if (authToken) {\n return {\n '//registry.npmjs.org/:_authToken': authToken,\n token: authToken,\n };\n }\n return {};\n }\n\n /**\n * Get lightweight package version information (optimized for performance)\n */\n async getPackageVersions(packageName: string): Promise<{\n name: string;\n versions: string[];\n latestVersion: string;\n tags: Record<string, string>;\n time?: Record<string, string>;\n }> {\n const registryUrl = this.getRegistryForPackage(packageName);\n const cacheKey = `package-versions:${registryUrl}:${packageName}`;\n\n // Check cache first if caching is enabled\n if (this.cachingEnabled) {\n const cached = this.getFromCache(cacheKey);\n if (cached) {\n return cached;\n }\n }\n\n const packageVersions = await this.executeWithRetry(async () => {\n // Use lightweight packument call without fullMetadata\n const authConfig = this.getAuthConfig(registryUrl);\n const packument = await pacote.packument(packageName, {\n registry: registryUrl,\n timeout: this.timeout,\n fullMetadata: false, // Key optimization: don't fetch full metadata\n ...authConfig,\n });\n\n const versions = Object.keys(packument.versions || {}).sort(semver.rcompare);\n const latestVersion = packument['dist-tags']?.latest || versions[0] || '';\n\n return {\n name: packument.name,\n versions,\n latestVersion,\n tags: packument['dist-tags'] || {},\n time: (packument as any).time || {}, // Still include time for newest versions feature\n };\n }, `Fetching package versions for ${packageName}`);\n\n // Cache the result if caching is enabled\n if (this.cachingEnabled) {\n this.setCache(cacheKey, packageVersions);\n }\n\n return packageVersions;\n }\n\n /**\n * Get package information including all versions\n * @deprecated Use getPackageVersions() for better performance\n */\n async getPackageInfo(packageName: string): Promise<PackageInfo> {\n const registryUrl = this.getRegistryForPackage(packageName);\n const cacheKey = `package-info:${registryUrl}:${packageName}`;\n\n // Check cache first if caching is enabled\n if (this.cachingEnabled) {\n const cached = this.getFromCache(cacheKey);\n if (cached) {\n return cached;\n }\n }\n\n // Use lightweight version and extend with additional metadata only if needed\n const versionInfo = await this.getPackageVersions(packageName);\n\n const packageInfo = await this.executeWithRetry(async () => {\n // Only fetch full metadata if we actually need the extended info\n const authConfig = this.getAuthConfig(registryUrl);\n const packument = await pacote.packument(packageName, {\n registry: registryUrl,\n timeout: this.timeout,\n fullMetadata: true,\n ...authConfig,\n });\n\n return {\n name: versionInfo.name,\n description: (packument as any).description || undefined,\n homepage: (packument as any).homepage || undefined,\n repository: (packument as any).repository || undefined,\n license: (packument as any).license || undefined,\n author: (packument as any).author || undefined,\n maintainers: (packument as any).maintainers || undefined,\n keywords: (packument as any).keywords || undefined,\n versions: versionInfo.versions,\n latestVersion: versionInfo.latestVersion,\n tags: versionInfo.tags,\n time: versionInfo.time || {},\n };\n }, `Fetching package info for ${packageName}`);\n\n // Cache the result if caching is enabled\n if (this.cachingEnabled) {\n this.setCache(cacheKey, packageInfo);\n }\n\n return packageInfo;\n }\n\n /**\n * Get the latest version of a package\n */\n async getLatestVersion(packageName: string): Promise<Version> {\n try {\n const versionInfo = await this.getPackageVersions(packageName);\n return Version.fromString(versionInfo.latestVersion);\n } catch (error) {\n throw new Error(`Failed to get latest version for ${packageName}: ${error}`);\n }\n }\n\n /**\n * Get the greatest version that satisfies a range\n */\n async getGreatestVersion(packageName: string, range?: VersionRange): Promise<Version> {\n try {\n const versionInfo = await this.getPackageVersions(packageName);\n\n if (!range) {\n return Version.fromString(versionInfo.latestVersion);\n }\n\n // Find the greatest version that satisfies the range\n const satisfyingVersions = versionInfo.versions.filter((v) => {\n try {\n const version = Version.fromString(v);\n return version.satisfies(range);\n } catch {\n return false;\n }\n });\n\n if (satisfyingVersions.length === 0) {\n throw new Error(`No versions satisfy range ${range.toString()}`);\n }\n\n // Return the first (greatest) version\n if (!satisfyingVersions[0]) {\n throw new Error(`No satisfying versions found for ${packageName}`);\n }\n return Version.fromString(satisfyingVersions[0]);\n } catch (error) {\n throw new Error(`Failed to get greatest version for ${packageName}: ${error}`);\n }\n }\n\n /**\n * Get versions by date (newest versions published)\n */\n async getNewestVersions(packageName: string, count: number = 10): Promise<Version[]> {\n try {\n const versionInfo = await this.getPackageVersions(packageName);\n\n // Sort versions by publication time\n const versionsWithTime = versionInfo.versions\n .map((version) => ({\n version,\n time: versionInfo.time?.[version] ? new Date(versionInfo.time[version]) : new Date(0),\n }))\n .sort((a, b) => b.time.getTime() - a.time.getTime())\n .slice(0, count);\n\n return versionsWithTime.map((item) => Version.fromString(item.version));\n } catch (error) {\n throw new Error(`Failed to get newest versions for ${packageName}: ${error}`);\n }\n }\n\n /**\n * Check for security vulnerabilities\n */\n async checkSecurityVulnerabilities(\n packageName: string,\n version: string\n ): Promise<SecurityReport> {\n const registryUrl = this.getRegistryForPackage(packageName);\n const cacheKey = `security:${registryUrl}:${packageName}@${version}`;\n\n // Check cache first\n const cached = this.getFromCache(cacheKey);\n if (cached) {\n return cached;\n }\n\n try {\n // Use npm audit API\n const auditData = {\n name: packageName,\n version: version,\n requires: {},\n dependencies: {},\n };\n\n const authConfig = this.getAuthConfig(registryUrl);\n const response = await npmRegistryFetch('/-/npm/v1/security/audits', {\n method: 'POST',\n body: JSON.stringify(auditData),\n headers: {\n 'Content-Type': 'application/json',\n },\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n });\n\n const auditResult = await response.json();\n const vulnerabilities: SecurityVulnerability[] = [];\n\n // Parse audit results\n if (auditResult.advisories) {\n for (const advisory of Object.values(auditResult.advisories) as any[]) {\n vulnerabilities.push({\n id: advisory.id.toString(),\n title: advisory.title,\n severity: advisory.severity,\n description: advisory.overview,\n reference: advisory.url,\n vulnerable_versions: advisory.vulnerable_versions,\n patched_versions: advisory.patched_versions,\n recommendation: advisory.recommendation,\n });\n }\n }\n\n const securityReport: SecurityReport = {\n package: packageName,\n version: version,\n vulnerabilities,\n hasVulnerabilities: vulnerabilities.length > 0,\n };\n\n // Cache the result\n this.setCache(cacheKey, securityReport);\n\n return securityReport;\n } catch (error) {\n // If security check fails, return empty report\n UserFriendlyErrorHandler.handleSecurityCheckFailure(packageName, error as Error);\n\n const emptyReport: SecurityReport = {\n package: packageName,\n version: version,\n vulnerabilities: [],\n hasVulnerabilities: false,\n };\n\n return emptyReport;\n }\n }\n\n /**\n * Batch query multiple packages with progress tracking\n */\n async batchQueryVersions(\n packages: string[],\n progressCallback?: (completed: number, total: number, currentPackage: string) => void\n ): Promise<Map<string, PackageInfo>> {\n const results = new Map<string, PackageInfo>();\n let completed = 0;\n const total = packages.length;\n\n // Process packages in parallel with configurable concurrency\n const chunks = this.chunkArray(packages, this.concurrency);\n\n for (const chunk of chunks) {\n const promises = chunk.map(async (packageName) => {\n try {\n const info = await this.getPackageInfo(packageName);\n results.set(packageName, info);\n\n // Update progress\n completed++;\n if (progressCallback) {\n progressCallback(completed, total, packageName);\n }\n } catch (error) {\n // Still count failed packages in progress\n completed++;\n if (progressCallback) {\n progressCallback(completed, total, packageName);\n }\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error);\n }\n });\n\n await Promise.all(promises);\n }\n\n return results;\n }\n\n /**\n * Check if package author has changed\n */\n async hasPackageAuthorChanged(\n packageName: string,\n fromVersion: string,\n toVersion: string\n ): Promise<boolean> {\n try {\n // const packageInfo = await this.getPackageInfo(packageName);\n\n const registryUrl = this.getRegistryForPackage(packageName);\n const authConfig = this.getAuthConfig(registryUrl);\n\n const fromVersionData = await pacote.manifest(`${packageName}@${fromVersion}`, {\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n });\n\n const toVersionData = await pacote.manifest(`${packageName}@${toVersion}`, {\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n });\n\n // Compare authors/maintainers\n const fromAuthor = this.normalizeAuthor((fromVersionData as any).author);\n const toAuthor = this.normalizeAuthor((toVersionData as any).author);\n\n return fromAuthor !== toAuthor;\n } catch (error) {\n // Log for debugging, don't show to user as this is not critical\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'author-check',\n });\n return false;\n }\n }\n\n /**\n * Get package download statistics\n */\n async getDownloadStats(\n packageName: string,\n period: 'last-day' | 'last-week' | 'last-month' = 'last-week'\n ): Promise<number> {\n try {\n const response = await fetch(\n `https://api.npmjs.org/downloads/point/${period}/${packageName}`\n );\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as any;\n return data.downloads || 0;\n } catch (error) {\n // Log for debugging, don't show to user as this is not critical\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'download-stats',\n });\n return 0;\n }\n }\n\n /**\n * Clear all cache\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Clear cache by type\n */\n clearCacheByType(type: 'versions' | 'package-info' | 'security' | 'all' = 'all'): void {\n if (type === 'all') {\n this.clearCache();\n return;\n }\n\n const prefix =\n type === 'versions'\n ? 'package-versions:'\n : type === 'package-info'\n ? 'package-info:'\n : 'security:';\n\n const keysToDelete: string[] = [];\n for (const key of this.cache.keys()) {\n if (key.startsWith(prefix)) {\n keysToDelete.push(key);\n }\n }\n\n keysToDelete.forEach((key) => this.cache.delete(key));\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats(): {\n total: number;\n versions: number;\n packageInfo: number;\n security: number;\n expired: number;\n } {\n const stats = { total: 0, versions: 0, packageInfo: 0, security: 0, expired: 0 };\n const now = Date.now();\n\n for (const [key, cached] of this.cache.entries()) {\n stats.total++;\n\n const timeout = this.getCacheTimeout(key);\n if (now - cached.timestamp > timeout) {\n stats.expired++;\n continue;\n }\n\n if (key.startsWith('package-versions:')) {\n stats.versions++;\n } else if (key.startsWith('package-info:')) {\n stats.packageInfo++;\n } else if (key.startsWith('security:')) {\n stats.security++;\n }\n }\n\n return stats;\n }\n\n /**\n * Get item from cache if not expired\n */\n private getFromCache(key: string): any | null {\n const cached = this.cache.get(key);\n if (!cached) {\n return null;\n }\n\n // Determine timeout based on cache key type\n const timeout = this.getCacheTimeout(key);\n\n if (Date.now() - cached.timestamp > timeout) {\n this.cache.delete(key);\n return null;\n }\n\n return cached.data;\n }\n\n /**\n * Get appropriate cache timeout based on key type\n */\n private getCacheTimeout(key: string): number {\n if (key.startsWith('package-versions:')) {\n return this.versionCacheTimeout;\n } else if (key.startsWith('security:')) {\n return this.securityCacheTimeout;\n } else if (key.startsWith('package-info:')) {\n return this.packageInfoCacheTimeout;\n }\n\n // Default to version cache timeout for unknown keys\n return this.versionCacheTimeout;\n }\n\n /**\n * Set item in cache\n */\n private setCache(key: string, data: any): void {\n this.cache.set(key, {\n data,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Split array into chunks\n */\n private chunkArray<T>(array: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size));\n }\n return chunks;\n }\n\n /**\n * Normalize author for comparison\n */\n private normalizeAuthor(author: any): string {\n if (typeof author === 'string') {\n return author.toLowerCase().trim();\n }\n if (typeof author === 'object' && author?.name) {\n return author.name.toLowerCase().trim();\n }\n return '';\n }\n}\n","/**\n * Catalog Update Service\n *\n * Core application service that handles catalog dependency updates.\n * Orchestrates domain objects and infrastructure services to provide\n * high-level use cases for checking and updating catalog dependencies.\n */\n\nimport { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\nimport { Version, VersionRange } from '../../domain/value-objects/version.js';\nimport { NpmRegistryService } from '../../infrastructure/external-services/npmRegistryService.js';\nimport { ConfigLoader } from '@pcu/utils';\nimport { AdvancedConfig } from '@pcu/utils';\nimport { UserFriendlyErrorHandler } from '@pcu/utils';\nimport { ProgressReporter } from '../interfaces/progressReporter.js';\n\nexport interface CheckOptions {\n workspacePath?: string | undefined;\n catalogName?: string | undefined;\n target?: UpdateTarget | undefined;\n includePrerelease?: boolean | undefined;\n exclude?: string[] | undefined;\n include?: string[] | undefined;\n progressReporter?: ProgressReporter | null;\n}\n\nexport interface UpdateOptions extends CheckOptions {\n interactive?: boolean;\n dryRun?: boolean;\n force?: boolean;\n createBackup?: boolean;\n}\n\nexport interface OutdatedReport {\n workspace: {\n path: string;\n name: string;\n };\n catalogs: CatalogUpdateInfo[];\n totalOutdated: number;\n hasUpdates: boolean;\n}\n\nexport interface CatalogUpdateInfo {\n catalogName: string;\n outdatedDependencies: OutdatedDependencyInfo[];\n totalPackages: number;\n outdatedCount: number;\n}\n\nexport interface OutdatedDependencyInfo {\n packageName: string;\n currentVersion: string;\n latestVersion: string;\n wantedVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n isSecurityUpdate: boolean;\n affectedPackages: string[];\n}\n\nexport interface UpdatePlan {\n workspace: {\n path: string;\n name: string;\n };\n updates: PlannedUpdate[];\n conflicts: VersionConflict[];\n totalUpdates: number;\n hasConflicts: boolean;\n}\n\nexport interface PlannedUpdate {\n catalogName: string;\n packageName: string;\n currentVersion: string;\n newVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n reason: string;\n affectedPackages: string[];\n requireConfirmation?: boolean;\n autoUpdate?: boolean;\n groupUpdate?: boolean;\n}\n\nexport interface VersionConflict {\n packageName: string;\n catalogs: Array<{\n catalogName: string;\n currentVersion: string;\n proposedVersion: string;\n }>;\n recommendation: string;\n}\n\nexport interface UpdateResult {\n success: boolean;\n workspace: {\n path: string;\n name: string;\n };\n updatedDependencies: UpdatedDependency[];\n skippedDependencies: SkippedDependency[];\n errors: UpdateError[];\n totalUpdated: number;\n totalSkipped: number;\n totalErrors: number;\n}\n\nexport interface UpdatedDependency {\n catalogName: string;\n packageName: string;\n fromVersion: string;\n toVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n}\n\nexport interface SkippedDependency {\n catalogName: string;\n packageName: string;\n currentVersion: string;\n reason: string;\n}\n\nexport interface UpdateError {\n catalogName: string;\n packageName: string;\n error: string;\n fatal: boolean;\n}\n\nexport interface ImpactAnalysis {\n packageName: string;\n catalogName: string;\n currentVersion: string;\n proposedVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n affectedPackages: PackageImpact[];\n riskLevel: 'low' | 'medium' | 'high';\n securityImpact: SecurityImpact;\n recommendations: string[];\n}\n\nexport interface PackageImpact {\n packageName: string;\n packagePath: string;\n dependencyType: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies';\n isBreakingChange: boolean;\n compatibilityRisk: 'low' | 'medium' | 'high';\n}\n\nexport interface SecurityImpact {\n hasVulnerabilities: boolean;\n fixedVulnerabilities: number;\n newVulnerabilities: number;\n severityChange: 'better' | 'worse' | 'same';\n}\n\nexport type UpdateTarget = 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n\nexport class CatalogUpdateService {\n constructor(\n private readonly workspaceRepository: WorkspaceRepository,\n private readonly registryService: NpmRegistryService\n ) {}\n\n /**\n * Create a new CatalogUpdateService with advanced configuration\n */\n static createWithConfig(\n workspaceRepository: WorkspaceRepository,\n workspacePath?: string\n ): CatalogUpdateService {\n const config = ConfigLoader.loadConfig(workspacePath || process.cwd());\n\n // Create registry service with advanced configuration\n const advancedConfig: AdvancedConfig = {};\n\n if (config.advanced?.concurrency !== undefined) {\n advancedConfig.concurrency = config.advanced.concurrency;\n }\n if (config.advanced?.timeout !== undefined) {\n advancedConfig.timeout = config.advanced.timeout;\n }\n if (config.advanced?.retries !== undefined) {\n advancedConfig.retries = config.advanced.retries;\n }\n if (config.advanced?.cacheValidityMinutes !== undefined) {\n advancedConfig.cacheValidityMinutes = config.advanced.cacheValidityMinutes;\n }\n\n // Use default registry for now, npmrc will handle scoped registries\n const registryUrl = 'https://registry.npmjs.org/';\n const workingDirectory = workspacePath || process.cwd();\n\n const registryService = new NpmRegistryService(registryUrl, advancedConfig, workingDirectory);\n\n return new CatalogUpdateService(workspaceRepository, registryService);\n }\n\n /**\n * Check for outdated catalog dependencies\n */\n async checkOutdatedDependencies(options: CheckOptions = {}): Promise<OutdatedReport> {\n const workspacePath = WorkspacePath.fromString(options.workspacePath || process.cwd());\n\n // Load configuration\n const config = ConfigLoader.loadConfig(workspacePath.toString());\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(workspacePath);\n if (!workspace) {\n throw new Error(`No pnpm workspace found at ${workspacePath.toString()}`);\n }\n\n const catalogs = workspace.getCatalogs();\n const catalogInfos: CatalogUpdateInfo[] = [];\n let totalOutdated = 0;\n\n // Filter catalogs if specific catalog requested\n const catalogsToCheck = options.catalogName\n ? [catalogs.get(options.catalogName)].filter(Boolean)\n : catalogs.getAll();\n\n if (catalogsToCheck.length === 0) {\n throw new Error(\n options.catalogName\n ? `Catalog \"${options.catalogName}\" not found`\n : 'No catalogs found in workspace'\n );\n }\n\n // Calculate total packages across all catalogs\n let totalPackages = 0;\n const allPackagesToCheck: Array<[string, any, any]> = [];\n\n for (const catalog of catalogsToCheck) {\n if (!catalog) continue;\n const dependencies = catalog.getDependencies();\n const packageArray = Array.from(dependencies);\n\n const packagesToCheck = packageArray.filter(([packageName]) => {\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config);\n return packageConfig.shouldUpdate;\n });\n\n // Add catalog info to each package for processing\n packagesToCheck.forEach(([packageName, range]) => {\n allPackagesToCheck.push([packageName, range, catalog]);\n });\n\n totalPackages += packagesToCheck.length;\n }\n\n // Create a single progress bar for all catalogs\n let progressReporter: ProgressReporter | null = null;\n if (totalPackages > 0 && options.progressReporter) {\n progressReporter = options.progressReporter;\n progressReporter.start(`正在检查 ${totalPackages} 个依赖包...`, totalPackages);\n }\n\n let completed = 0;\n\n // Check each catalog for outdated dependencies\n for (const catalog of catalogsToCheck) {\n if (!catalog) {\n throw new Error(`Catalog \"${catalogsToCheck[0]?.getName() || 'unknown'}\" not found`);\n }\n const dependencies = catalog.getDependencies();\n\n // Convert to array for parallel processing\n const packageArray = Array.from(dependencies);\n\n // Filter packages that should be updated based on configuration\n const packagesToCheck = packageArray.filter(([packageName]) => {\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config);\n return packageConfig.shouldUpdate;\n });\n\n // Process packages in parallel with concurrency control (pass progress info)\n const outdatedDependencies = await this.processPackagesInParallel(\n packagesToCheck,\n catalog,\n workspace,\n config,\n options,\n progressReporter,\n completed,\n totalPackages\n );\n\n // Update completed count\n completed += packagesToCheck.length;\n\n const catalogInfo: CatalogUpdateInfo = {\n catalogName: catalog!.getName(),\n outdatedDependencies,\n totalPackages: dependencies.size,\n outdatedCount: outdatedDependencies.length,\n };\n\n catalogInfos.push(catalogInfo);\n totalOutdated += outdatedDependencies.length;\n }\n\n // Complete the progress bar\n if (progressReporter) {\n if (totalOutdated > 0) {\n progressReporter.success(`✅ 检查完成! 发现 ${totalOutdated} 个可更新的依赖包`);\n } else {\n progressReporter.success('✅ 检查完成! 所有依赖包都是最新的');\n }\n }\n\n return {\n workspace: {\n path: workspacePath.toString(),\n name: workspacePath.getDirectoryName(),\n },\n catalogs: catalogInfos,\n totalOutdated,\n hasUpdates: totalOutdated > 0,\n };\n }\n\n /**\n * Plan catalog dependency updates\n */\n async planUpdates(options: UpdateOptions): Promise<UpdatePlan> {\n const outdatedReport = await this.checkOutdatedDependencies(options);\n\n const updates: PlannedUpdate[] = [];\n const conflicts: VersionConflict[] = [];\n\n // Load configuration for package rules and monorepo settings\n const workspacePath = options.workspacePath || process.cwd();\n const config = ConfigLoader.loadConfig(workspacePath);\n\n // Convert outdated dependencies to planned updates\n for (const catalogInfo of outdatedReport.catalogs) {\n for (const outdated of catalogInfo.outdatedDependencies) {\n // Get package-specific configuration\n const packageConfig = ConfigLoader.getPackageConfig(outdated.packageName, config);\n\n const update: PlannedUpdate = {\n catalogName: catalogInfo.catalogName,\n packageName: outdated.packageName,\n currentVersion: outdated.currentVersion,\n newVersion: outdated.latestVersion,\n updateType: outdated.updateType,\n reason: this.getUpdateReason(outdated),\n affectedPackages: outdated.affectedPackages,\n requireConfirmation: packageConfig.requireConfirmation,\n autoUpdate: packageConfig.autoUpdate,\n groupUpdate: packageConfig.groupUpdate,\n };\n\n updates.push(update);\n }\n }\n\n // Handle syncVersions - ensure packages in syncVersions list are synchronized across catalogs\n if (config.monorepo?.syncVersions && config.monorepo.syncVersions.length > 0) {\n const workspacePathObj = WorkspacePath.fromString(workspacePath);\n const workspace = await this.workspaceRepository.findByPath(workspacePathObj);\n\n if (workspace) {\n updates.push(\n ...(await this.createSyncVersionUpdates(config.monorepo.syncVersions, workspace, updates))\n );\n }\n }\n\n // Detect conflicts (same package in multiple catalogs with different versions)\n const packageCatalogMap = new Map<string, PlannedUpdate[]>();\n\n for (const update of updates) {\n if (!packageCatalogMap.has(update.packageName)) {\n packageCatalogMap.set(update.packageName, []);\n }\n packageCatalogMap.get(update.packageName)!.push(update);\n }\n\n // Handle conflicts with catalogPriority\n for (const [packageName, packageUpdates] of packageCatalogMap) {\n if (packageUpdates.length > 1) {\n const uniqueVersions = new Set(packageUpdates.map((u) => u.newVersion));\n if (uniqueVersions.size > 1) {\n const resolvedConflict = this.resolveVersionConflict(\n packageName,\n packageUpdates,\n config.monorepo?.catalogPriority || ['default']\n );\n\n if (resolvedConflict) {\n conflicts.push(resolvedConflict);\n }\n }\n }\n }\n\n return {\n workspace: outdatedReport.workspace,\n updates,\n conflicts,\n totalUpdates: updates.length,\n hasConflicts: conflicts.length > 0,\n };\n }\n\n /**\n * Execute catalog dependency updates\n */\n async executeUpdates(plan: UpdatePlan, options: UpdateOptions): Promise<UpdateResult> {\n const workspacePath = WorkspacePath.fromString(plan.workspace.path);\n\n // Load configuration for security settings\n const config = ConfigLoader.loadConfig(workspacePath.toString());\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(workspacePath);\n if (!workspace) {\n throw new Error(`Workspace not found at ${workspacePath.toString()}`);\n }\n\n const updatedDependencies: UpdatedDependency[] = [];\n const skippedDependencies: SkippedDependency[] = [];\n const errors: UpdateError[] = [];\n\n // Track security updates for notification\n const securityUpdates: string[] = [];\n\n // Execute updates\n for (const update of plan.updates) {\n try {\n // Skip if conflicts exist and force is not enabled\n if (plan.hasConflicts && !options.force) {\n const hasConflict = plan.conflicts.some((c) => c.packageName === update.packageName);\n if (hasConflict) {\n skippedDependencies.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n currentVersion: update.currentVersion,\n reason: 'Version conflict - use --force to override',\n });\n continue;\n }\n }\n\n // Check if this is a security update and track it\n let isSecurityUpdate = false;\n if (config.security?.notifyOnSecurityUpdate) {\n try {\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n update.packageName,\n update.currentVersion\n );\n if (securityReport.hasVulnerabilities) {\n isSecurityUpdate = true;\n securityUpdates.push(\n `${update.packageName}@${update.currentVersion} → ${update.newVersion}`\n );\n }\n } catch (error) {\n UserFriendlyErrorHandler.handleSecurityCheckFailure(\n update.packageName,\n error as Error,\n { operation: 'update' }\n );\n }\n }\n\n // Perform the update\n workspace.updateCatalogDependency(\n update.catalogName,\n update.packageName,\n update.newVersion\n );\n\n updatedDependencies.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n fromVersion: update.currentVersion,\n toVersion: update.newVersion,\n updateType: update.updateType,\n });\n\n // Log security update notification\n if (isSecurityUpdate && config.security?.notifyOnSecurityUpdate) {\n console.log(\n `✅ Security fix applied: ${update.packageName}@${update.currentVersion} → ${update.newVersion}`\n );\n }\n } catch (error) {\n errors.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n error: String(error),\n fatal: false,\n });\n }\n }\n\n // Save workspace if not in dry-run mode\n if (!options.dryRun && updatedDependencies.length > 0) {\n try {\n await this.workspaceRepository.save(workspace);\n\n // Show summary of security updates if any\n if (securityUpdates.length > 0 && config.security?.notifyOnSecurityUpdate) {\n console.log(`\\n🔒 Security Updates Summary:`);\n console.log(` Applied ${securityUpdates.length} security fix(es):`);\n securityUpdates.forEach((update) => console.log(` • ${update}`));\n }\n\n // Show summary of synced version updates\n const syncUpdates = updatedDependencies.filter((u) =>\n plan.updates.find(\n (pu) =>\n pu.packageName === u.packageName &&\n pu.catalogName === u.catalogName &&\n pu.reason.includes('Sync version')\n )\n );\n\n if (syncUpdates.length > 0) {\n console.log(`\\n🔄 Version Sync Summary:`);\n const syncedPackages = new Set(syncUpdates.map((u) => u.packageName));\n console.log(` Synchronized ${syncedPackages.size} package(s) across catalogs:`);\n\n // Group by package name\n const syncByPackage = new Map<string, typeof syncUpdates>();\n syncUpdates.forEach((update) => {\n if (!syncByPackage.has(update.packageName)) {\n syncByPackage.set(update.packageName, []);\n }\n syncByPackage.get(update.packageName)!.push(update);\n });\n\n syncByPackage.forEach((updates, packageName) => {\n const catalogs = updates.map((u) => u.catalogName).join(', ');\n const version = updates[0]?.toVersion;\n console.log(` • ${packageName}@${version} in catalogs: ${catalogs}`);\n });\n }\n\n // Show catalog priority resolution if any\n if (\n plan.hasConflicts &&\n plan.conflicts.some((c) => c.recommendation.includes('Priority catalog'))\n ) {\n console.log(`\\n📋 Catalog Priority Resolutions:`);\n plan.conflicts\n .filter((c) => c.recommendation.includes('Priority catalog'))\n .forEach((conflict) => {\n console.log(` • ${conflict.packageName}: ${conflict.recommendation}`);\n });\n }\n } catch (error) {\n errors.push({\n catalogName: '',\n packageName: '',\n error: `Failed to save workspace: ${error}`,\n fatal: true,\n });\n }\n }\n\n return {\n success: errors.filter((e) => e.fatal).length === 0,\n workspace: plan.workspace,\n updatedDependencies,\n skippedDependencies,\n errors,\n totalUpdated: updatedDependencies.length,\n totalSkipped: skippedDependencies.length,\n totalErrors: errors.length,\n };\n }\n\n /**\n * Analyze the impact of updating a specific dependency\n */\n async analyzeImpact(\n catalogName: string,\n packageName: string,\n newVersion: string,\n workspacePath?: string\n ): Promise<ImpactAnalysis> {\n const wsPath = WorkspacePath.fromString(workspacePath || process.cwd());\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(wsPath);\n if (!workspace) {\n throw new Error(`No pnpm workspace found at ${wsPath.toString()}`);\n }\n\n const catalog = workspace.getCatalogs().get(catalogName);\n if (!catalog) {\n throw new Error(`Catalog \"${catalogName}\" not found`);\n }\n\n const currentRange = catalog.getDependencyVersion(packageName);\n if (!currentRange) {\n throw new Error(`Package \"${packageName}\" not found in catalog \"${catalogName}\"`);\n }\n\n const currentVersion = currentRange.toString();\n const proposedVersion = Version.fromString(newVersion);\n const currentVersionObj = currentRange.getMinVersion();\n\n if (!currentVersionObj) {\n throw new Error(`Cannot determine current version for ${packageName}`);\n }\n\n const updateType = currentVersionObj.getDifferenceType(proposedVersion);\n\n // Get affected packages\n const affectedPackagesCollection = workspace.getPackagesUsingCatalogDependency(\n catalogName,\n packageName\n );\n const packageImpacts: PackageImpact[] = [];\n\n for (const pkg of affectedPackagesCollection.getAll()) {\n const catalogRefs = pkg\n .getCatalogReferences()\n .filter(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n );\n\n for (const ref of catalogRefs) {\n const isBreakingChange = updateType === 'major';\n const compatibilityRisk = this.assessCompatibilityRisk(updateType);\n\n packageImpacts.push({\n packageName: pkg.getName(),\n packagePath: pkg.getPath().toString(),\n dependencyType: ref.getDependencyType(),\n isBreakingChange,\n compatibilityRisk,\n });\n }\n }\n\n // Check security impact\n const securityImpact = await this.analyzeSecurityImpact(\n packageName,\n currentVersion,\n newVersion\n );\n\n // Assess overall risk\n const riskLevel = this.assessOverallRisk(updateType, packageImpacts, securityImpact);\n\n // Generate recommendations\n const recommendations = this.generateRecommendations(\n updateType,\n securityImpact,\n packageImpacts\n );\n\n return {\n packageName,\n catalogName,\n currentVersion,\n proposedVersion: newVersion,\n updateType: updateType as 'major' | 'minor' | 'patch',\n affectedPackages: packageImpacts,\n riskLevel,\n securityImpact,\n recommendations,\n };\n }\n\n /**\n * Process packages in parallel with concurrency control and progress tracking\n */\n private async processPackagesInParallel(\n packagesToCheck: Array<[string, any]>,\n catalog: any,\n workspace: any,\n config: any,\n options: CheckOptions,\n progressReporter: ProgressReporter | null,\n startingCompleted: number = 0,\n totalPackages: number = 0\n ): Promise<OutdatedDependencyInfo[]> {\n const concurrency = config.advanced?.concurrency || 8; // Increased from 5 to match NCU\n const outdatedDependencies: OutdatedDependencyInfo[] = [];\n let completed = startingCompleted;\n\n // Process packages in chunks with true parallelism within each chunk\n const chunks = this.chunkArray(packagesToCheck, concurrency);\n\n for (const chunk of chunks) {\n const chunkResults = await Promise.all(\n chunk.map(async ([packageName, currentRange]) => {\n try {\n const result = await this.processPackageCheck(\n packageName,\n currentRange,\n catalog,\n workspace,\n config,\n options\n );\n\n // Update progress for successful package\n completed++;\n if (progressReporter && totalPackages > 0) {\n progressReporter.update(completed, `正在检查依赖包: ${packageName}`);\n }\n\n return result;\n } catch (error) {\n // Update progress even for failed packages\n completed++;\n if (progressReporter && totalPackages > 0) {\n progressReporter.update(completed, `跳过包 ${packageName} (检查失败)`);\n }\n\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'check',\n });\n return null;\n }\n })\n );\n\n // Add successful results to the array\n chunkResults.forEach((result) => {\n if (result) {\n outdatedDependencies.push(result);\n }\n });\n }\n\n return outdatedDependencies;\n }\n\n /**\n * Process a single package check (extracted from the main loop)\n */\n private async processPackageCheck(\n packageName: string,\n currentRange: any,\n catalog: any,\n workspace: any,\n config: any,\n options: CheckOptions\n ): Promise<OutdatedDependencyInfo | null> {\n // Get package-specific configuration\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config);\n const effectiveTarget = packageConfig.target as UpdateTarget;\n\n // Defer security checks - only do them after we know the package needs updating\n const outdatedInfo = await this.checkPackageUpdate(\n packageName,\n currentRange,\n effectiveTarget,\n options.includePrerelease || config.defaults?.includePrerelease || false\n );\n\n if (!outdatedInfo) {\n return null; // Package doesn't need updating\n }\n\n // Now check for security vulnerabilities only for packages that need updating\n let hasSecurityVulnerabilities = false;\n if (config.security?.autoFixVulnerabilities) {\n try {\n const currentVersion = currentRange.getMinVersion()?.toString();\n if (currentVersion) {\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n packageName,\n currentVersion\n );\n hasSecurityVulnerabilities = securityReport.hasVulnerabilities;\n\n // Allow major updates for security fixes if configured\n if (hasSecurityVulnerabilities && config.security.allowMajorForSecurity) {\n // Re-check with 'latest' target if security fix requires it\n const securityFixInfo = await this.checkPackageUpdate(\n packageName,\n currentRange,\n 'latest',\n options.includePrerelease || config.defaults?.includePrerelease || false\n );\n if (securityFixInfo) {\n Object.assign(outdatedInfo, securityFixInfo);\n }\n }\n }\n } catch (error) {\n UserFriendlyErrorHandler.handleSecurityCheckFailure(packageName, error as Error);\n }\n }\n\n // Get affected packages\n const affectedPackages = workspace\n .getPackagesUsingCatalogDependency(catalog.getName(), packageName)\n .getPackageNames();\n\n // Log security notifications if enabled\n if (hasSecurityVulnerabilities && config.security?.notifyOnSecurityUpdate) {\n console.warn(\n `🔒 Security vulnerability detected in ${packageName}@${outdatedInfo.currentVersion}`\n );\n }\n\n return {\n ...outdatedInfo,\n affectedPackages,\n isSecurityUpdate: hasSecurityVulnerabilities || outdatedInfo.isSecurityUpdate,\n };\n }\n\n /**\n * Split array into chunks for parallel processing\n */\n private chunkArray<T>(array: T[], chunkSize: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(array.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * Check if a package needs updating\n */\n private async checkPackageUpdate(\n packageName: string,\n currentRange: VersionRange,\n target: UpdateTarget,\n includePrerelease: boolean\n ): Promise<OutdatedDependencyInfo | null> {\n try {\n // Use lightweight version API for better performance\n const versionInfo = await this.registryService.getPackageVersions(packageName);\n\n let targetVersion: Version;\n\n switch (target) {\n case 'latest':\n targetVersion = Version.fromString(versionInfo.latestVersion);\n break;\n case 'greatest':\n targetVersion = await this.registryService.getGreatestVersion(packageName);\n break;\n case 'newest':\n const newestVersions = await this.registryService.getNewestVersions(packageName, 1);\n if (!newestVersions[0]) {\n throw new Error(`No versions found for ${packageName}`);\n }\n targetVersion = newestVersions[0];\n break;\n case 'minor':\n case 'patch':\n targetVersion = await this.getConstrainedVersion(packageName, currentRange, target);\n break;\n default:\n targetVersion = Version.fromString(versionInfo.latestVersion);\n }\n\n // Skip prereleases unless explicitly requested\n if (!includePrerelease && targetVersion.isPrerelease()) {\n return null;\n }\n\n const currentVersion = currentRange.getMinVersion();\n if (!currentVersion) {\n return null;\n }\n\n // Check if update is needed\n if (!targetVersion.isNewerThan(currentVersion)) {\n return null;\n }\n\n const updateType = currentVersion.getDifferenceType(targetVersion);\n\n // Check for security vulnerabilities\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n packageName,\n currentVersion.toString()\n );\n\n return {\n packageName,\n currentVersion: currentVersion.toString(),\n latestVersion: targetVersion.toString(),\n wantedVersion: targetVersion.toString(),\n updateType: updateType as 'major' | 'minor' | 'patch',\n isSecurityUpdate: securityReport.hasVulnerabilities,\n affectedPackages: [], // Will be filled by caller\n };\n } catch (error) {\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'update-check',\n });\n return null;\n }\n }\n\n /**\n * Get version constrained by update type\n */\n private async getConstrainedVersion(\n packageName: string,\n currentRange: VersionRange,\n constraint: 'minor' | 'patch'\n ): Promise<Version> {\n const currentVersion = currentRange.getMinVersion();\n if (!currentVersion) {\n throw new Error(`Cannot determine current version for ${packageName}`);\n }\n\n const versionInfo = await this.registryService.getPackageVersions(packageName);\n\n // Filter versions based on constraint\n const compatibleVersions = versionInfo.versions.filter((v) => {\n try {\n const version = Version.fromString(v);\n const diff = currentVersion.getDifferenceType(version);\n\n if (constraint === 'patch') {\n return diff === 'patch' || diff === 'same';\n } else if (constraint === 'minor') {\n return diff === 'minor' || diff === 'patch' || diff === 'same';\n }\n\n return false;\n } catch {\n return false;\n }\n });\n\n if (compatibleVersions.length === 0) {\n return currentVersion;\n }\n\n // Return the highest compatible version\n if (!compatibleVersions[0]) {\n throw new Error(`No compatible versions found for ${packageName}`);\n }\n return Version.fromString(compatibleVersions[0]);\n }\n\n /**\n * Generate update reason description\n */\n private getUpdateReason(outdated: OutdatedDependencyInfo): string {\n if (outdated.isSecurityUpdate) {\n return 'Security update available';\n }\n\n switch (outdated.updateType) {\n case 'major':\n return 'Major version update available';\n case 'minor':\n return 'Minor version update available';\n case 'patch':\n return 'Patch version update available';\n default:\n return 'Update available';\n }\n }\n\n /**\n * Analyze security impact of version change\n */\n private async analyzeSecurityImpact(\n packageName: string,\n currentVersion: string,\n newVersion: string\n ): Promise<SecurityImpact> {\n try {\n const [currentSecurity, newSecurity] = await Promise.all([\n this.registryService.checkSecurityVulnerabilities(packageName, currentVersion),\n this.registryService.checkSecurityVulnerabilities(packageName, newVersion),\n ]);\n\n const fixedVulnerabilities =\n currentSecurity.vulnerabilities.length - newSecurity.vulnerabilities.length;\n const newVulnerabilities = Math.max(\n 0,\n newSecurity.vulnerabilities.length - currentSecurity.vulnerabilities.length\n );\n\n let severityChange: SecurityImpact['severityChange'] = 'same';\n if (fixedVulnerabilities > 0) {\n severityChange = 'better';\n } else if (newVulnerabilities > 0) {\n severityChange = 'worse';\n }\n\n return {\n hasVulnerabilities: currentSecurity.hasVulnerabilities || newSecurity.hasVulnerabilities,\n fixedVulnerabilities: Math.max(0, fixedVulnerabilities),\n newVulnerabilities,\n severityChange,\n };\n } catch {\n return {\n hasVulnerabilities: false,\n fixedVulnerabilities: 0,\n newVulnerabilities: 0,\n severityChange: 'same',\n };\n }\n }\n\n /**\n * Assess compatibility risk for update type\n */\n private assessCompatibilityRisk(updateType: string): 'low' | 'medium' | 'high' {\n switch (updateType) {\n case 'patch':\n return 'low';\n case 'minor':\n return 'medium';\n case 'major':\n return 'high';\n default:\n return 'medium';\n }\n }\n\n /**\n * Assess overall risk level\n */\n private assessOverallRisk(\n updateType: string,\n packageImpacts: PackageImpact[],\n securityImpact: SecurityImpact\n ): 'low' | 'medium' | 'high' {\n // Security fixes reduce risk\n if (securityImpact.fixedVulnerabilities > 0) {\n return updateType === 'major' ? 'medium' : 'low';\n }\n\n // New vulnerabilities increase risk\n if (securityImpact.newVulnerabilities > 0) {\n return 'high';\n }\n\n // Base risk on update type and number of affected packages\n const affectedPackageCount = packageImpacts.length;\n\n if (updateType === 'major') {\n return affectedPackageCount > 5 ? 'high' : 'medium';\n } else if (updateType === 'minor') {\n return affectedPackageCount > 10 ? 'medium' : 'low';\n } else {\n return 'low';\n }\n }\n\n /**\n * Generate recommendations based on analysis\n */\n private generateRecommendations(\n updateType: string,\n securityImpact: SecurityImpact,\n packageImpacts: PackageImpact[]\n ): string[] {\n const recommendations: string[] = [];\n\n if (securityImpact.fixedVulnerabilities > 0) {\n recommendations.push('🔒 Security update recommended - fixes known vulnerabilities');\n }\n\n if (securityImpact.newVulnerabilities > 0) {\n recommendations.push('⚠️ New vulnerabilities detected - review carefully before updating');\n }\n\n if (updateType === 'major') {\n recommendations.push('📖 Review changelog for breaking changes before updating');\n recommendations.push('🧪 Test thoroughly in development environment');\n }\n\n const breakingChangePackages = packageImpacts.filter((p) => p.isBreakingChange);\n if (breakingChangePackages.length > 0) {\n recommendations.push(`🔧 ${breakingChangePackages.length} package(s) may need code changes`);\n }\n\n if (packageImpacts.length > 5) {\n recommendations.push('📦 Many packages affected - consider updating in batches');\n }\n\n if (recommendations.length === 0) {\n recommendations.push('✅ Low risk update - safe to proceed');\n }\n\n return recommendations;\n }\n\n /**\n * Create sync version updates for packages that should be synchronized across catalogs\n */\n private async createSyncVersionUpdates(\n syncVersions: string[],\n workspace: any,\n existingUpdates: PlannedUpdate[]\n ): Promise<PlannedUpdate[]> {\n const syncUpdates: PlannedUpdate[] = [];\n const catalogs = workspace.getCatalogs();\n const allCatalogs = catalogs.getAll();\n\n for (const packageName of syncVersions) {\n // Check if this package exists in multiple catalogs\n const catalogsWithPackage = allCatalogs.filter(\n (catalog: any) => catalog && catalog.getDependencyVersion(packageName)\n );\n\n if (catalogsWithPackage.length <= 1) {\n continue; // No need to sync if package is only in one catalog\n }\n\n // Find the highest version from existing updates or determine target version\n let targetVersion: string | null = null;\n let targetUpdateType: 'major' | 'minor' | 'patch' = 'patch';\n\n // Check if this package has any existing updates\n const existingUpdate = existingUpdates.find((u) => u.packageName === packageName);\n if (existingUpdate) {\n targetVersion = existingUpdate.newVersion;\n targetUpdateType = existingUpdate.updateType;\n } else {\n // Get latest version for this package using lightweight API\n try {\n const versionInfo = await this.registryService.getPackageVersions(packageName);\n targetVersion = versionInfo.latestVersion;\n } catch (error) {\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'sync',\n });\n continue;\n }\n }\n\n if (!targetVersion) continue;\n\n // Create sync updates for all catalogs that need updating\n for (const catalog of catalogsWithPackage) {\n const currentRange = catalog.getDependencyVersion(packageName);\n if (!currentRange) continue;\n\n const currentVersion = currentRange.getMinVersion();\n if (!currentVersion) continue;\n\n const currentVersionString = currentVersion.toString();\n\n // Skip if already at target version\n if (currentVersionString === targetVersion) continue;\n\n // Check if this update already exists\n const existingUpdateForCatalog = existingUpdates.find(\n (u) => u.packageName === packageName && u.catalogName === catalog.getName()\n );\n\n if (existingUpdateForCatalog) {\n // Update the existing update to use the sync version\n existingUpdateForCatalog.newVersion = targetVersion;\n existingUpdateForCatalog.reason = `Sync version across catalogs: ${existingUpdateForCatalog.reason}`;\n } else {\n // Create new sync update\n const affectedPackages = workspace\n .getPackagesUsingCatalogDependency(catalog.getName(), packageName)\n .getPackageNames();\n\n const syncUpdate: PlannedUpdate = {\n catalogName: catalog.getName(),\n packageName: packageName,\n currentVersion: currentVersionString,\n newVersion: targetVersion,\n updateType: targetUpdateType,\n reason: `Sync version with other catalogs`,\n affectedPackages,\n requireConfirmation: true, // Sync updates should be confirmed\n autoUpdate: false,\n groupUpdate: true,\n };\n\n syncUpdates.push(syncUpdate);\n }\n }\n }\n\n return syncUpdates;\n }\n\n /**\n * Resolve version conflicts using catalog priority\n */\n private resolveVersionConflict(\n packageName: string,\n packageUpdates: PlannedUpdate[],\n catalogPriority: string[]\n ): VersionConflict | null {\n // Find the highest priority catalog with an update for this package\n let priorityCatalog: PlannedUpdate | null = null;\n\n for (const catalogName of catalogPriority) {\n const catalogUpdate = packageUpdates.find((u) => u.catalogName === catalogName);\n if (catalogUpdate) {\n priorityCatalog = catalogUpdate;\n break;\n }\n }\n\n // If no priority catalog found, use the first one\n if (!priorityCatalog) {\n priorityCatalog = packageUpdates[0] || null;\n }\n\n // Update all other catalogs to use the priority catalog's version\n const priorityVersion = priorityCatalog?.newVersion;\n if (priorityVersion && priorityCatalog) {\n for (const update of packageUpdates) {\n if (update.catalogName !== priorityCatalog.catalogName) {\n update.newVersion = priorityVersion;\n update.reason = `Using version from priority catalog (${priorityCatalog.catalogName}): ${update.reason}`;\n }\n }\n }\n\n // Create conflict record for reporting\n const uniqueVersions = new Set(packageUpdates.map((u) => u.newVersion));\n if (uniqueVersions.size > 1) {\n return {\n packageName,\n catalogs: packageUpdates.map((u) => ({\n catalogName: u.catalogName,\n currentVersion: u.currentVersion,\n proposedVersion: u.newVersion,\n })),\n recommendation: `Resolved using catalog priority. Priority catalog '${priorityCatalog?.catalogName}' version '${priorityVersion}' selected.`,\n };\n }\n\n return null;\n }\n}\n","/**\n * Workspace Service\n *\n * Application service for workspace discovery, validation, and management.\n * Provides high-level operations for working with pnpm workspaces.\n */\n\nimport { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js';\nimport { Workspace } from '../../domain/entities/workspace.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\n\nexport interface WorkspaceInfo {\n path: string;\n name: string;\n isValid: boolean;\n hasPackages: boolean;\n hasCatalogs: boolean;\n packageCount: number;\n catalogCount: number;\n catalogNames: string[];\n}\n\nexport interface WorkspaceValidationReport {\n isValid: boolean;\n workspace: WorkspaceInfo;\n errors: string[];\n warnings: string[];\n recommendations: string[];\n}\n\nexport interface CatalogInfo {\n name: string;\n packageCount: number;\n packages: string[];\n mode: string;\n}\n\nexport interface PackageInfo {\n name: string;\n path: string;\n hasPackageJson: boolean;\n catalogReferences: CatalogReferenceInfo[];\n dependencies: DependencyInfo[];\n}\n\nexport interface CatalogReferenceInfo {\n catalogName: string;\n packageName: string;\n dependencyType: string;\n}\n\nexport interface DependencyInfo {\n name: string;\n version: string;\n type: string;\n isCatalogReference: boolean;\n}\n\nexport class WorkspaceService {\n constructor(private readonly workspaceRepository: WorkspaceRepository) {}\n\n /**\n * Discover workspace from current directory or specified path\n */\n async discoverWorkspace(searchPath?: string): Promise<Workspace> {\n const path = searchPath ? WorkspacePath.fromString(searchPath) : undefined;\n\n const workspace = await this.workspaceRepository.discoverWorkspace(path);\n\n if (!workspace) {\n throw new Error(\n searchPath\n ? `No pnpm workspace found at or above ${searchPath}`\n : 'No pnpm workspace found in current directory or parent directories'\n );\n }\n\n return workspace;\n }\n\n /**\n * Get workspace information\n */\n async getWorkspaceInfo(workspacePath?: string): Promise<WorkspaceInfo> {\n const path = WorkspacePath.fromString(workspacePath || process.cwd());\n\n // Try to load workspace\n const workspace = await this.workspaceRepository.findByPath(path);\n\n if (!workspace) {\n return {\n path: path.toString(),\n name: path.getDirectoryName(),\n isValid: false,\n hasPackages: false,\n hasCatalogs: false,\n packageCount: 0,\n catalogCount: 0,\n catalogNames: [],\n };\n }\n\n const packages = workspace.getPackages();\n const catalogs = workspace.getCatalogs();\n\n return {\n path: path.toString(),\n name: path.getDirectoryName(),\n isValid: true,\n hasPackages: !packages.isEmpty(),\n hasCatalogs: !catalogs.isEmpty(),\n packageCount: packages.size(),\n catalogCount: catalogs.size(),\n catalogNames: catalogs.getCatalogNames(),\n };\n }\n\n /**\n * Validate workspace integrity and configuration\n */\n async validateWorkspace(workspacePath?: string): Promise<WorkspaceValidationReport> {\n const path = WorkspacePath.fromString(workspacePath || process.cwd());\n const workspaceInfo = await this.getWorkspaceInfo(workspacePath);\n\n if (!workspaceInfo.isValid) {\n return {\n isValid: false,\n workspace: workspaceInfo,\n errors: ['Not a valid pnpm workspace'],\n warnings: [],\n recommendations: [\n 'Initialize a pnpm workspace with: pnpm init',\n 'Create pnpm-workspace.yaml file',\n 'Define package patterns in pnpm-workspace.yaml',\n ],\n };\n }\n\n // Load workspace for detailed validation\n const workspace = await this.workspaceRepository.findByPath(path);\n if (!workspace) {\n throw new Error('Workspace validation failed - workspace not found');\n }\n\n // Validate workspace consistency\n const validationResult = workspace.validateConsistency();\n const recommendations: string[] = [];\n\n // Generate recommendations based on workspace state\n if (!workspaceInfo.hasCatalogs) {\n recommendations.push('Consider using catalogs to centralize dependency management');\n }\n\n if (workspaceInfo.packageCount === 0) {\n recommendations.push(\n 'No packages found - check your package patterns in pnpm-workspace.yaml'\n );\n }\n\n if (workspaceInfo.packageCount > 20) {\n recommendations.push(\n 'Large workspace detected - consider organizing packages into logical groups'\n );\n }\n\n // Validate catalogs\n const catalogValidation = workspace.getCatalogs().validate();\n const allErrors = [...validationResult.getErrors(), ...catalogValidation.getErrors()];\n const allWarnings = [...validationResult.getWarnings(), ...catalogValidation.getWarnings()];\n\n return {\n isValid: validationResult.getIsValid() && catalogValidation.getIsValid(),\n workspace: workspaceInfo,\n errors: allErrors,\n warnings: allWarnings,\n recommendations,\n };\n }\n\n /**\n * Get detailed catalog information\n */\n async getCatalogs(workspacePath?: string): Promise<CatalogInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const catalogs = workspace.getCatalogs();\n\n return catalogs.getAll().map((catalog) => ({\n name: catalog.getName(),\n packageCount: catalog.getPackageNames().length,\n packages: catalog.getPackageNames(),\n mode: catalog.getMode(),\n }));\n }\n\n /**\n * Get detailed package information\n */\n async getPackages(workspacePath?: string): Promise<PackageInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const packages = workspace.getPackages();\n\n return packages.getAll().map((pkg) => {\n const catalogReferences = pkg.getCatalogReferences();\n const dependencies = pkg.getDependencies();\n\n // Collect all dependencies from all types\n const allDependencies: DependencyInfo[] = [];\n const depTypes = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const;\n\n for (const depType of depTypes) {\n const deps = dependencies.getDependenciesByType(depType);\n for (const [name, version] of deps) {\n allDependencies.push({\n name,\n version,\n type: depType,\n isCatalogReference: version.startsWith('catalog:'),\n });\n }\n }\n\n return {\n name: pkg.getName(),\n path: pkg.getPath().toString(),\n hasPackageJson: true, // If package was loaded, it has package.json\n catalogReferences: catalogReferences.map((ref) => ({\n catalogName: ref.getCatalogName(),\n packageName: ref.getPackageName(),\n dependencyType: ref.getDependencyType(),\n })),\n dependencies: allDependencies,\n };\n });\n }\n\n /**\n * Check if workspace uses catalogs\n */\n async usesCatalogs(workspacePath?: string): Promise<boolean> {\n try {\n const workspace = await this.discoverWorkspace(workspacePath);\n return !workspace.getCatalogs().isEmpty();\n } catch {\n return false;\n }\n }\n\n /**\n * Get packages that use a specific catalog\n */\n async getPackagesUsingCatalog(\n catalogName: string,\n workspacePath?: string\n ): Promise<PackageInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const packagesUsingCatalog = workspace.getPackages().findPackagesUsingCatalog(catalogName);\n\n return packagesUsingCatalog.map((pkg) => {\n const catalogReferences = pkg\n .getCatalogReferences()\n .filter((ref) => ref.getCatalogName() === catalogName);\n\n const dependencies = pkg.getDependencies();\n const allDependencies: DependencyInfo[] = [];\n const depTypes = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const;\n\n for (const depType of depTypes) {\n const deps = dependencies.getDependenciesByType(depType);\n for (const [name, version] of deps) {\n allDependencies.push({\n name,\n version,\n type: depType,\n isCatalogReference: version.startsWith('catalog:'),\n });\n }\n }\n\n return {\n name: pkg.getName(),\n path: pkg.getPath().toString(),\n hasPackageJson: true,\n catalogReferences: catalogReferences.map((ref) => ({\n catalogName: ref.getCatalogName(),\n packageName: ref.getPackageName(),\n dependencyType: ref.getDependencyType(),\n })),\n dependencies: allDependencies,\n };\n });\n }\n\n /**\n * Get workspace statistics\n */\n async getWorkspaceStats(workspacePath?: string): Promise<WorkspaceStats> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const packages = workspace.getPackages();\n const catalogs = workspace.getCatalogs();\n\n // Count dependencies\n let totalDependencies = 0;\n let catalogDependencies = 0;\n const dependencyTypes = {\n dependencies: 0,\n devDependencies: 0,\n peerDependencies: 0,\n optionalDependencies: 0,\n };\n\n for (const pkg of packages.getAll()) {\n const deps = pkg.getDependencies();\n const catalogRefs = pkg.getCatalogReferences();\n\n catalogDependencies += catalogRefs.length;\n\n for (const depType of Object.keys(dependencyTypes) as Array<keyof typeof dependencyTypes>) {\n const typeDeps = deps.getDependenciesByType(depType);\n dependencyTypes[depType] += typeDeps.size;\n totalDependencies += typeDeps.size;\n }\n }\n\n // Count catalog definitions\n let totalCatalogEntries = 0;\n for (const catalog of catalogs.getAll()) {\n totalCatalogEntries += catalog.getPackageNames().length;\n }\n\n return {\n workspace: {\n path: workspace.getPath().toString(),\n name: workspace.getPath().getDirectoryName(),\n },\n packages: {\n total: packages.size(),\n withCatalogReferences: packages.findPackagesWithCatalogReferences().length,\n },\n catalogs: {\n total: catalogs.size(),\n totalEntries: totalCatalogEntries,\n },\n dependencies: {\n total: totalDependencies,\n catalogReferences: catalogDependencies,\n byType: dependencyTypes,\n },\n };\n }\n\n /**\n * Find workspaces in a directory tree\n */\n async findWorkspaces(searchRoot: string): Promise<WorkspaceInfo[]> {\n // This would implement a recursive search for pnpm workspaces\n // For now, we'll just check the provided directory\n const workspaceInfo = await this.getWorkspaceInfo(searchRoot);\n return workspaceInfo.isValid ? [workspaceInfo] : [];\n }\n\n /**\n * Check workspace health\n */\n async checkHealth(workspacePath?: string): Promise<WorkspaceHealthReport> {\n const validation = await this.validateWorkspace(workspacePath);\n const stats = await this.getWorkspaceStats(workspacePath);\n\n const issues: HealthIssue[] = [];\n const score = this.calculateHealthScore(validation, stats, issues);\n\n return {\n score,\n status: this.getHealthStatus(score),\n validation,\n stats,\n issues,\n lastChecked: new Date(),\n };\n }\n\n /**\n * Calculate workspace health score (0-100)\n */\n private calculateHealthScore(\n validation: WorkspaceValidationReport,\n stats: WorkspaceStats,\n issues: HealthIssue[]\n ): number {\n let score = 100;\n\n // Deduct points for errors\n score -= validation.errors.length * 20;\n\n // Deduct points for warnings\n score -= validation.warnings.length * 5;\n\n // Deduct points for workspace issues\n if (!stats.workspace) {\n score -= 30;\n }\n\n if (stats.packages.total === 0) {\n score -= 20;\n issues.push({\n type: 'warning',\n message: 'No packages found in workspace',\n suggestion: 'Check package patterns in pnpm-workspace.yaml',\n });\n }\n\n if (stats.catalogs.total === 0) {\n score -= 10;\n issues.push({\n type: 'info',\n message: 'No catalogs defined',\n suggestion: 'Consider using catalogs for better dependency management',\n });\n }\n\n // Bonus for good practices\n if (stats.dependencies.catalogReferences > 0) {\n score += 5;\n }\n\n return Math.max(0, Math.min(100, score));\n }\n\n /**\n * Get health status from score\n */\n private getHealthStatus(score: number): 'excellent' | 'good' | 'fair' | 'poor' {\n if (score >= 90) return 'excellent';\n if (score >= 70) return 'good';\n if (score >= 50) return 'fair';\n return 'poor';\n }\n}\n\nexport interface WorkspaceStats {\n workspace: {\n path: string;\n name: string;\n };\n packages: {\n total: number;\n withCatalogReferences: number;\n };\n catalogs: {\n total: number;\n totalEntries: number;\n };\n dependencies: {\n total: number;\n catalogReferences: number;\n byType: {\n dependencies: number;\n devDependencies: number;\n peerDependencies: number;\n optionalDependencies: number;\n };\n };\n}\n\nexport interface HealthIssue {\n type: 'error' | 'warning' | 'info';\n message: string;\n suggestion: string;\n}\n\nexport interface WorkspaceHealthReport {\n score: number;\n status: 'excellent' | 'good' | 'fair' | 'poor';\n validation: WorkspaceValidationReport;\n stats: WorkspaceStats;\n issues: HealthIssue[];\n lastChecked: Date;\n}\n","/**\n * Catalog Entity\n *\n * Represents a pnpm catalog that manages dependency versions centrally.\n * A catalog contains a collection of dependencies with their version ranges.\n */\n\nimport { VersionRange } from '../value-objects/version.js';\n\nexport type CatalogId = string;\nexport type PackageName = string;\nexport type CatalogName = string;\n\nexport class Catalog {\n private readonly id: CatalogId;\n private readonly name: CatalogName;\n private readonly dependencies: Map<PackageName, VersionRange>;\n private readonly mode: CatalogMode;\n\n private constructor(\n id: CatalogId,\n name: CatalogName,\n dependencies: Map<PackageName, VersionRange>,\n mode: CatalogMode = CatalogMode.MANUAL\n ) {\n this.id = id;\n this.name = name;\n this.dependencies = new Map(dependencies);\n this.mode = mode;\n }\n\n /**\n * Create a new Catalog\n */\n public static create(\n id: CatalogId,\n name: CatalogName,\n dependencies: Record<string, string> = {},\n mode: CatalogMode = CatalogMode.MANUAL\n ): Catalog {\n const dependencyMap = new Map<PackageName, VersionRange>();\n\n for (const [packageName, versionRange] of Object.entries(dependencies)) {\n try {\n dependencyMap.set(packageName, VersionRange.fromString(versionRange));\n } catch (error) {\n throw new Error(\n `Invalid version range for package \"${packageName}\" in catalog \"${name}\": ${versionRange}`\n );\n }\n }\n\n return new Catalog(id, name, dependencyMap, mode);\n }\n\n /**\n * Get catalog identifier\n */\n public getId(): CatalogId {\n return this.id;\n }\n\n /**\n * Get catalog name\n */\n public getName(): CatalogName {\n return this.name;\n }\n\n /**\n * Get catalog mode\n */\n public getMode(): CatalogMode {\n return this.mode;\n }\n\n /**\n * Get all dependencies in this catalog\n */\n public getDependencies(): ReadonlyMap<PackageName, VersionRange> {\n return this.dependencies;\n }\n\n /**\n * Get all package names in this catalog\n */\n public getPackageNames(): PackageName[] {\n return Array.from(this.dependencies.keys());\n }\n\n /**\n * Check if catalog contains a specific package\n */\n public hasDependency(packageName: PackageName): boolean {\n return this.dependencies.has(packageName);\n }\n\n /**\n * Get version range for a specific package\n */\n public getDependencyVersion(packageName: PackageName): VersionRange | null {\n return this.dependencies.get(packageName) || null;\n }\n\n /**\n * Add or update a dependency\n */\n public updateDependencyVersion(packageName: PackageName, versionRange: string): void {\n try {\n const parsedRange = VersionRange.fromString(versionRange);\n this.dependencies.set(packageName, parsedRange);\n } catch (error) {\n throw new Error(`Invalid version range for package \"${packageName}\": ${versionRange}`);\n }\n }\n\n /**\n * Remove a dependency from the catalog\n */\n public removeDependency(packageName: PackageName): boolean {\n return this.dependencies.delete(packageName);\n }\n\n /**\n * Check version compatibility for a package\n */\n public checkVersionCompatibility(packageName: PackageName, requestedVersion: string): boolean {\n const catalogVersion = this.dependencies.get(packageName);\n if (!catalogVersion) {\n return false;\n }\n\n try {\n const requestedRange = VersionRange.fromString(requestedVersion);\n return catalogVersion.isCompatibleWith(requestedRange);\n } catch {\n return false;\n }\n }\n\n /**\n * Get packages that would be affected by changing a dependency version\n */\n public getAffectedPackagesByDependencyChange(\n packageName: PackageName,\n newVersionRange: string\n ): PackageName[] {\n if (!this.hasDependency(packageName)) {\n return [];\n }\n\n try {\n const newRange = VersionRange.fromString(newVersionRange);\n const currentRange = this.dependencies.get(packageName)!;\n\n // If the ranges are compatible, no packages are affected\n if (currentRange.isCompatibleWith(newRange)) {\n return [];\n }\n\n // Return all packages that use this catalog (this would typically be resolved\n // at the aggregate level with workspace information)\n return [packageName];\n } catch {\n return [packageName];\n }\n }\n\n /**\n * Validate catalog integrity\n */\n public validate(): CatalogValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for empty catalog\n if (this.dependencies.size === 0) {\n warnings.push(`Catalog \"${this.name}\" is empty`);\n }\n\n // Validate each dependency\n for (const [packageName, versionRange] of this.dependencies) {\n // Check package name format\n if (!this.isValidPackageName(packageName)) {\n errors.push(`Invalid package name: \"${packageName}\"`);\n }\n\n // Check for common issues\n if (versionRange.toString().includes('*')) {\n warnings.push(`Package \"${packageName}\" uses wildcard version which may be unstable`);\n }\n }\n\n return new CatalogValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Convert catalog to plain object for serialization\n */\n public toPlainObject(): CatalogData {\n const dependencies: Record<string, string> = {};\n\n for (const [packageName, versionRange] of this.dependencies) {\n dependencies[packageName] = versionRange.toString();\n }\n\n return {\n id: this.id,\n name: this.name,\n dependencies,\n mode: this.mode,\n };\n }\n\n /**\n * Create catalog from plain object\n */\n public static fromPlainObject(data: CatalogData): Catalog {\n return Catalog.create(data.id, data.name, data.dependencies, data.mode);\n }\n\n /**\n * Check if a package name is valid\n */\n private isValidPackageName(packageName: string): boolean {\n // Basic npm package name validation\n const validPackageNameRegex = /^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n return validPackageNameRegex.test(packageName);\n }\n\n /**\n * Check equality with another catalog\n */\n public equals(other: Catalog): boolean {\n if (this.id !== other.id || this.name !== other.name || this.mode !== other.mode) {\n return false;\n }\n\n if (this.dependencies.size !== other.dependencies.size) {\n return false;\n }\n\n for (const [packageName, versionRange] of this.dependencies) {\n const otherRange = other.dependencies.get(packageName);\n if (!otherRange || !versionRange.equals(otherRange)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Catalog Mode Enum\n */\nexport enum CatalogMode {\n MANUAL = 'manual',\n STRICT = 'strict',\n PREFER = 'prefer',\n}\n\n/**\n * Catalog Data Interface for serialization\n */\nexport interface CatalogData {\n id: CatalogId;\n name: CatalogName;\n dependencies: Record<string, string>;\n mode: CatalogMode;\n}\n\n/**\n * Catalog Validation Result\n */\nexport class CatalogValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * Package Entity\n *\n * Represents a package in a pnpm workspace that may reference catalog dependencies.\n * Handles package.json structure and catalog dependency references.\n */\n\nimport { WorkspacePath } from '../value-objects/workspacePath.js';\n\nexport type PackageId = string;\nexport type PackageName = string;\nexport type DependencyType =\n | 'dependencies'\n | 'devDependencies'\n | 'peerDependencies'\n | 'optionalDependencies';\n\nexport class Package {\n private readonly id: PackageId;\n private readonly name: PackageName;\n private readonly path: WorkspacePath;\n private readonly dependencies: DependencyCollection;\n private readonly catalogReferences: CatalogReference[];\n private readonly originalData: PackageJsonData;\n\n private constructor(\n id: PackageId,\n name: PackageName,\n path: WorkspacePath,\n dependencies: DependencyCollection,\n catalogReferences: CatalogReference[],\n originalData: PackageJsonData\n ) {\n this.id = id;\n this.name = name;\n this.path = path;\n this.dependencies = dependencies;\n this.catalogReferences = [...catalogReferences];\n this.originalData = { ...originalData };\n }\n\n /**\n * Create a new Package\n */\n public static create(\n id: PackageId,\n name: PackageName,\n path: WorkspacePath,\n packageJsonData: PackageJsonData\n ): Package {\n const dependencies = DependencyCollection.fromPackageJson(packageJsonData);\n const catalogReferences = Package.extractCatalogReferences(packageJsonData);\n\n return new Package(id, name, path, dependencies, catalogReferences, packageJsonData);\n }\n\n /**\n * Get package identifier\n */\n public getId(): PackageId {\n return this.id;\n }\n\n /**\n * Get package name\n */\n public getName(): PackageName {\n return this.name;\n }\n\n /**\n * Get package path\n */\n public getPath(): WorkspacePath {\n return this.path;\n }\n\n /**\n * Get all dependencies\n */\n public getDependencies(): DependencyCollection {\n return this.dependencies;\n }\n\n /**\n * Get catalog references\n */\n public getCatalogReferences(): CatalogReference[] {\n return [...this.catalogReferences];\n }\n\n /**\n * Get catalog dependencies only\n */\n public getCatalogDependencies(): CatalogDependency[] {\n return this.catalogReferences.map(\n (ref) =>\n new CatalogDependency(ref.getPackageName(), ref.getCatalogName(), ref.getDependencyType())\n );\n }\n\n /**\n * Check if package uses a specific catalog dependency\n */\n public usesCatalogDependency(catalogName: string, packageName: string): boolean {\n return this.catalogReferences.some(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n );\n }\n\n /**\n * Update a dependency from catalog\n */\n public updateDependencyFromCatalog(\n catalogName: string,\n packageName: string,\n _newVersion: string\n ): void {\n const reference = this.catalogReferences.find(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n );\n\n if (!reference) {\n throw new Error(\n `Package \"${this.name}\" does not reference \"${packageName}\" from catalog \"${catalogName}\"`\n );\n }\n\n // Update the dependency in the collection\n this.dependencies.updateDependency(\n reference.getDependencyType(),\n packageName,\n `catalog:${catalogName === 'default' ? '' : catalogName}`\n );\n }\n\n /**\n * Get dependencies of a specific type\n */\n public getDependenciesByType(type: DependencyType): Map<string, string> {\n return this.dependencies.getDependenciesByType(type);\n }\n\n /**\n * Get package.json data representation\n */\n public toPackageJsonData(): PackageJsonData {\n // Start with original package.json to preserve fields like scripts, author, etc.\n const data: PackageJsonData = { ...this.originalData };\n\n // Replace dependency sections with updated versions\n data.dependencies = Object.fromEntries(this.dependencies.getDependenciesByType('dependencies'));\n data.devDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('devDependencies')\n );\n data.peerDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('peerDependencies')\n );\n data.optionalDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('optionalDependencies')\n );\n\n return data;\n }\n\n /**\n * Extract catalog references from package.json data\n */\n private static extractCatalogReferences(packageJsonData: PackageJsonData): CatalogReference[] {\n const references: CatalogReference[] = [];\n const dependencyTypes: DependencyType[] = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ];\n\n for (const depType of dependencyTypes) {\n const deps = packageJsonData[depType] || {};\n\n for (const [packageName, version] of Object.entries(deps)) {\n if (typeof version === 'string' && version.startsWith('catalog:')) {\n const catalogName = version === 'catalog:' ? 'default' : version.substring(8);\n references.push(new CatalogReference(catalogName, packageName, depType));\n }\n }\n }\n\n return references;\n }\n\n /**\n * Validate package structure\n */\n public validate(): PackageValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate package name\n if (!this.isValidPackageName(this.name)) {\n errors.push(`Invalid package name: \"${this.name}\"`);\n }\n\n // Validate catalog references\n for (const ref of this.catalogReferences) {\n if (!this.isValidPackageName(ref.getPackageName())) {\n errors.push(`Invalid dependency name in catalog reference: \"${ref.getPackageName()}\"`);\n }\n }\n\n return new PackageValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Check if package name is valid\n */\n private isValidPackageName(packageName: string): boolean {\n const validPackageNameRegex = /^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n return validPackageNameRegex.test(packageName);\n }\n\n /**\n * Check equality with another package\n */\n public equals(other: Package): boolean {\n return this.id === other.id && this.name === other.name && this.path.equals(other.path);\n }\n}\n\n/**\n * Catalog Reference Value Object\n */\nexport class CatalogReference {\n constructor(\n private readonly catalogName: string,\n private readonly packageName: string,\n private readonly dependencyType: DependencyType\n ) {}\n\n public getCatalogName(): string {\n return this.catalogName;\n }\n\n public getPackageName(): string {\n return this.packageName;\n }\n\n public getDependencyType(): DependencyType {\n return this.dependencyType;\n }\n\n public equals(other: CatalogReference): boolean {\n return (\n this.catalogName === other.catalogName &&\n this.packageName === other.packageName &&\n this.dependencyType === other.dependencyType\n );\n }\n}\n\n/**\n * Catalog Dependency Value Object\n */\nexport class CatalogDependency {\n constructor(\n private readonly packageName: string,\n private readonly catalogName: string,\n private readonly dependencyType: DependencyType\n ) {}\n\n public getPackageName(): string {\n return this.packageName;\n }\n\n public getCatalogName(): string {\n return this.catalogName;\n }\n\n public getDependencyType(): DependencyType {\n return this.dependencyType;\n }\n}\n\n/**\n * Dependency Collection Value Object\n */\nexport class DependencyCollection {\n private readonly dependencies: Map<DependencyType, Map<string, string>>;\n\n private constructor(dependencies: Map<DependencyType, Map<string, string>>) {\n this.dependencies = dependencies;\n }\n\n public static empty(): DependencyCollection {\n const deps = new Map<DependencyType, Map<string, string>>();\n deps.set('dependencies', new Map());\n deps.set('devDependencies', new Map());\n deps.set('peerDependencies', new Map());\n deps.set('optionalDependencies', new Map());\n return new DependencyCollection(deps);\n }\n\n public static fromPackageJson(packageJsonData: PackageJsonData): DependencyCollection {\n const deps = new Map<DependencyType, Map<string, string>>();\n\n deps.set('dependencies', new Map(Object.entries(packageJsonData.dependencies || {})));\n deps.set('devDependencies', new Map(Object.entries(packageJsonData.devDependencies || {})));\n deps.set('peerDependencies', new Map(Object.entries(packageJsonData.peerDependencies || {})));\n deps.set(\n 'optionalDependencies',\n new Map(Object.entries(packageJsonData.optionalDependencies || {}))\n );\n\n return new DependencyCollection(deps);\n }\n\n public getDependenciesByType(type: DependencyType): Map<string, string> {\n return new Map(this.dependencies.get(type) || []);\n }\n\n public updateDependency(type: DependencyType, packageName: string, version: string): void {\n const typeMap = this.dependencies.get(type);\n if (typeMap) {\n typeMap.set(packageName, version);\n }\n }\n\n public filterByCatalogDependency(\n _catalogName: string,\n _packageName: string\n ): DependencyCollection {\n // This would filter dependencies that match catalog references\n // Implementation would require catalog reference information\n return this;\n }\n}\n\n/**\n * Package.json Data Interface\n */\nexport interface PackageJsonData {\n name: string;\n version?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n [key: string]: any;\n}\n\n/**\n * Package Validation Result\n */\nexport class PackageValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * Workspace Entity\n *\n * Represents a pnpm workspace with catalog configuration.\n * This is a core domain entity that encapsulates workspace business logic.\n */\n\nimport { WorkspaceId } from '../value-objects/workspaceId.js';\nimport { WorkspacePath } from '../value-objects/workspacePath.js';\nimport { CatalogCollection } from '../value-objects/catalogCollection.js';\nimport { PackageCollection } from '../value-objects/packageCollection.js';\nimport { WorkspaceConfig } from '../value-objects/workspaceConfig.js';\n\nexport class Workspace {\n private constructor(\n private readonly id: WorkspaceId,\n private readonly path: WorkspacePath,\n private config: WorkspaceConfig,\n private catalogs: CatalogCollection,\n private readonly packages: PackageCollection\n ) {}\n\n /**\n * Create a new Workspace instance\n */\n public static create(\n id: WorkspaceId,\n path: WorkspacePath,\n config: WorkspaceConfig,\n catalogs: CatalogCollection,\n packages: PackageCollection\n ): Workspace {\n return new Workspace(id, path, config, catalogs, packages);\n }\n\n /**\n * Get workspace identifier\n */\n public getId(): WorkspaceId {\n return this.id;\n }\n\n /**\n * Get workspace path\n */\n public getPath(): WorkspacePath {\n return this.path;\n }\n\n /**\n * Get workspace configuration\n */\n public getConfig(): WorkspaceConfig {\n return this.config;\n }\n\n /**\n * Get all catalogs in this workspace\n */\n public getCatalogs(): CatalogCollection {\n return this.catalogs;\n }\n\n /**\n * Get all packages in this workspace\n */\n public getPackages(): PackageCollection {\n return this.packages;\n }\n\n /**\n * Check if workspace has a specific catalog\n */\n public hasCatalog(catalogName: string): boolean {\n return this.catalogs.has(catalogName);\n }\n\n /**\n * Get packages that use a specific catalog dependency\n */\n public getPackagesUsingCatalogDependency(\n catalogName: string,\n packageName: string\n ): PackageCollection {\n return this.packages.filterByCatalogDependency(catalogName, packageName);\n }\n\n /**\n * Validate workspace consistency\n * Ensures all catalog references in packages exist in catalogs\n */\n public validateConsistency(): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check if all catalog references in packages exist\n for (const pkg of this.packages.getAll()) {\n const catalogRefs = pkg.getCatalogReferences();\n\n for (const ref of catalogRefs) {\n if (!this.catalogs.has(ref.getCatalogName())) {\n errors.push(\n `Package \"${pkg.getName()}\" references unknown catalog \"${ref.getCatalogName()}\"`\n );\n }\n\n const catalog = this.catalogs.get(ref.getCatalogName());\n if (catalog && !catalog.hasDependency(ref.getPackageName())) {\n warnings.push(\n `Package \"${pkg.getName()}\" references \"${ref.getPackageName()}\" ` +\n `from catalog \"${ref.getCatalogName()}\" but it's not defined in the catalog`\n );\n }\n }\n }\n\n return new ValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Get outdated catalog dependencies\n */\n public async getOutdatedCatalogDependencies(): Promise<OutdatedDependency[]> {\n // This would typically use a domain service to check versions\n // For now, return empty array as placeholder\n return [];\n }\n\n /**\n * Update a catalog dependency version\n */\n public updateCatalogDependency(\n catalogName: string,\n packageName: string,\n newVersion: string\n ): void {\n const catalog = this.catalogs.get(catalogName);\n if (!catalog) {\n throw new Error(`Catalog \"${catalogName}\" not found`);\n }\n\n // Update the catalog in the collection\n catalog.updateDependencyVersion(packageName, newVersion);\n\n // Also update the WorkspaceConfig to ensure consistency\n this.config = this.config.updateCatalogDependency(catalogName, packageName, newVersion);\n }\n}\n\n/**\n * Validation result value object\n */\nexport class ValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n\n/**\n * Outdated dependency value object\n */\nexport class OutdatedDependency {\n constructor(\n private readonly catalogName: string,\n private readonly packageName: string,\n private readonly currentVersion: string,\n private readonly latestVersion: string,\n private readonly updateType: 'major' | 'minor' | 'patch'\n ) {}\n\n public getCatalogName(): string {\n return this.catalogName;\n }\n\n public getPackageName(): string {\n return this.packageName;\n }\n\n public getCurrentVersion(): string {\n return this.currentVersion;\n }\n\n public getLatestVersion(): string {\n return this.latestVersion;\n }\n\n public getUpdateType(): 'major' | 'minor' | 'patch' {\n return this.updateType;\n }\n}\n","/**\n * CatalogCollection Value Object\n *\n * Represents a collection of catalogs in a workspace.\n * Provides operations for managing and querying multiple catalogs.\n */\n\nimport { Catalog, CatalogName } from '../entities/catalog.js';\n\nexport class CatalogCollection {\n private readonly catalogs: Map<CatalogName, Catalog>;\n\n private constructor(catalogs: Map<CatalogName, Catalog>) {\n this.catalogs = new Map(catalogs);\n }\n\n /**\n * Create an empty catalog collection\n */\n public static empty(): CatalogCollection {\n return new CatalogCollection(new Map());\n }\n\n /**\n * Create a catalog collection from an array of catalogs\n */\n public static fromCatalogs(catalogs: Catalog[]): CatalogCollection {\n const catalogMap = new Map<CatalogName, Catalog>();\n\n for (const catalog of catalogs) {\n catalogMap.set(catalog.getName(), catalog);\n }\n\n return new CatalogCollection(catalogMap);\n }\n\n /**\n * Create a catalog collection from a Map\n */\n public static fromMap(catalogMap: Map<CatalogName, Catalog>): CatalogCollection {\n return new CatalogCollection(catalogMap);\n }\n\n /**\n * Check if collection contains a catalog with the given name\n */\n public has(catalogName: CatalogName): boolean {\n return this.catalogs.has(catalogName);\n }\n\n /**\n * Get a catalog by name\n */\n public get(catalogName: CatalogName): Catalog | undefined {\n return this.catalogs.get(catalogName);\n }\n\n /**\n * Get all catalogs as an array\n */\n public getAll(): Catalog[] {\n return Array.from(this.catalogs.values());\n }\n\n /**\n * Get all catalog names\n */\n public getCatalogNames(): CatalogName[] {\n return Array.from(this.catalogs.keys());\n }\n\n /**\n * Get the number of catalogs\n */\n public size(): number {\n return this.catalogs.size;\n }\n\n /**\n * Check if collection is empty\n */\n public isEmpty(): boolean {\n return this.catalogs.size === 0;\n }\n\n /**\n * Add a catalog to the collection\n */\n public add(catalog: Catalog): CatalogCollection {\n const newCatalogs = new Map(this.catalogs);\n newCatalogs.set(catalog.getName(), catalog);\n return new CatalogCollection(newCatalogs);\n }\n\n /**\n * Remove a catalog from the collection\n */\n public remove(catalogName: CatalogName): CatalogCollection {\n const newCatalogs = new Map(this.catalogs);\n newCatalogs.delete(catalogName);\n return new CatalogCollection(newCatalogs);\n }\n\n /**\n * Update a catalog in the collection\n */\n public update(catalog: Catalog): CatalogCollection {\n if (!this.has(catalog.getName())) {\n throw new Error(`Catalog \"${catalog.getName()}\" not found in collection`);\n }\n\n const newCatalogs = new Map(this.catalogs);\n newCatalogs.set(catalog.getName(), catalog);\n return new CatalogCollection(newCatalogs);\n }\n\n /**\n * Get the default catalog (named 'default' or the first one)\n */\n public getDefault(): Catalog | undefined {\n // First, try to find a catalog named 'default'\n const defaultCatalog = this.catalogs.get('default');\n if (defaultCatalog) {\n return defaultCatalog;\n }\n\n // If no 'default' catalog, return the first one\n const firstCatalog = this.catalogs.values().next().value;\n return firstCatalog;\n }\n\n /**\n * Filter catalogs by a predicate function\n */\n public filter(predicate: (catalog: Catalog) => boolean): CatalogCollection {\n const filteredCatalogs = new Map<CatalogName, Catalog>();\n\n for (const [name, catalog] of this.catalogs) {\n if (predicate(catalog)) {\n filteredCatalogs.set(name, catalog);\n }\n }\n\n return new CatalogCollection(filteredCatalogs);\n }\n\n /**\n * Find catalogs that contain a specific package\n */\n public findCatalogsWithPackage(packageName: string): Catalog[] {\n return this.getAll().filter((catalog) => catalog.hasDependency(packageName));\n }\n\n /**\n * Get all unique package names across all catalogs\n */\n public getAllPackageNames(): string[] {\n const packageNames = new Set<string>();\n\n for (const catalog of this.catalogs.values()) {\n for (const packageName of catalog.getPackageNames()) {\n packageNames.add(packageName);\n }\n }\n\n return Array.from(packageNames);\n }\n\n /**\n * Validate all catalogs in the collection\n */\n public validate(): CatalogCollectionValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for empty collection\n if (this.isEmpty()) {\n warnings.push('No catalogs found in workspace');\n }\n\n // Validate each catalog\n for (const catalog of this.catalogs.values()) {\n const result = catalog.validate();\n errors.push(...result.getErrors().map((err) => `Catalog \"${catalog.getName()}\": ${err}`));\n warnings.push(\n ...result.getWarnings().map((warn) => `Catalog \"${catalog.getName()}\": ${warn}`)\n );\n }\n\n // Check for duplicate package definitions across catalogs\n const packageCatalogMap = new Map<string, string[]>();\n\n for (const catalog of this.catalogs.values()) {\n for (const packageName of catalog.getPackageNames()) {\n if (!packageCatalogMap.has(packageName)) {\n packageCatalogMap.set(packageName, []);\n }\n packageCatalogMap.get(packageName)!.push(catalog.getName());\n }\n }\n\n // Warn about packages defined in multiple catalogs\n for (const [packageName, catalogNames] of packageCatalogMap) {\n if (catalogNames.length > 1) {\n warnings.push(\n `Package \"${packageName}\" is defined in multiple catalogs: ${catalogNames.join(', ')}`\n );\n }\n }\n\n return new CatalogCollectionValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Convert to a Map for serialization\n */\n public toMap(): Map<CatalogName, Catalog> {\n return new Map(this.catalogs);\n }\n\n /**\n * Iterate over catalogs\n */\n public *[Symbol.iterator](): Iterator<[CatalogName, Catalog]> {\n yield* this.catalogs;\n }\n\n /**\n * Check equality with another catalog collection\n */\n public equals(other: CatalogCollection): boolean {\n if (this.size() !== other.size()) {\n return false;\n }\n\n for (const [name, catalog] of this.catalogs) {\n const otherCatalog = other.get(name);\n if (!otherCatalog || !catalog.equals(otherCatalog)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Catalog Collection Validation Result\n */\nexport class CatalogCollectionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * PackageCollection Value Object\n *\n * Represents a collection of packages in a workspace.\n * Provides operations for managing and querying multiple packages.\n */\n\nimport { Package, PackageName } from '../entities/package.js';\n\nexport class PackageCollection {\n private readonly packages: Map<PackageName, Package>;\n\n private constructor(packages: Map<PackageName, Package>) {\n this.packages = new Map(packages);\n }\n\n /**\n * Create an empty package collection\n */\n public static empty(): PackageCollection {\n return new PackageCollection(new Map());\n }\n\n /**\n * Create a package collection from an array of packages\n */\n public static fromPackages(packages: Package[]): PackageCollection {\n const packageMap = new Map<PackageName, Package>();\n\n for (const pkg of packages) {\n packageMap.set(pkg.getName(), pkg);\n }\n\n return new PackageCollection(packageMap);\n }\n\n /**\n * Create a package collection from a Map\n */\n public static fromMap(packageMap: Map<PackageName, Package>): PackageCollection {\n return new PackageCollection(packageMap);\n }\n\n /**\n * Check if collection contains a package with the given name\n */\n public has(packageName: PackageName): boolean {\n return this.packages.has(packageName);\n }\n\n /**\n * Get a package by name\n */\n public get(packageName: PackageName): Package | undefined {\n return this.packages.get(packageName);\n }\n\n /**\n * Get all packages as an array\n */\n public getAll(): Package[] {\n return Array.from(this.packages.values());\n }\n\n /**\n * Get all package names\n */\n public getPackageNames(): PackageName[] {\n return Array.from(this.packages.keys());\n }\n\n /**\n * Get the number of packages\n */\n public size(): number {\n return this.packages.size;\n }\n\n /**\n * Check if collection is empty\n */\n public isEmpty(): boolean {\n return this.packages.size === 0;\n }\n\n /**\n * Add a package to the collection\n */\n public add(pkg: Package): PackageCollection {\n const newPackages = new Map(this.packages);\n newPackages.set(pkg.getName(), pkg);\n return new PackageCollection(newPackages);\n }\n\n /**\n * Remove a package from the collection\n */\n public remove(packageName: PackageName): PackageCollection {\n const newPackages = new Map(this.packages);\n newPackages.delete(packageName);\n return new PackageCollection(newPackages);\n }\n\n /**\n * Update a package in the collection\n */\n public update(pkg: Package): PackageCollection {\n if (!this.has(pkg.getName())) {\n throw new Error(`Package \"${pkg.getName()}\" not found in collection`);\n }\n\n const newPackages = new Map(this.packages);\n newPackages.set(pkg.getName(), pkg);\n return new PackageCollection(newPackages);\n }\n\n /**\n * Filter packages by a predicate function\n */\n public filter(predicate: (pkg: Package) => boolean): PackageCollection {\n const filteredPackages = new Map<PackageName, Package>();\n\n for (const [name, pkg] of this.packages) {\n if (predicate(pkg)) {\n filteredPackages.set(name, pkg);\n }\n }\n\n return new PackageCollection(filteredPackages);\n }\n\n /**\n * Filter packages that use a specific catalog dependency\n */\n public filterByCatalogDependency(catalogName: string, packageName: string): PackageCollection {\n return this.filter((pkg) => pkg.usesCatalogDependency(catalogName, packageName));\n }\n\n /**\n * Find packages that have catalog references\n */\n public findPackagesWithCatalogReferences(): Package[] {\n return this.getAll().filter((pkg) => pkg.getCatalogReferences().length > 0);\n }\n\n /**\n * Find packages that reference a specific catalog\n */\n public findPackagesUsingCatalog(catalogName: string): Package[] {\n return this.getAll().filter((pkg) =>\n pkg.getCatalogReferences().some((ref) => ref.getCatalogName() === catalogName)\n );\n }\n\n /**\n * Get all unique catalog names referenced by packages\n */\n public getReferencedCatalogNames(): string[] {\n const catalogNames = new Set<string>();\n\n for (const pkg of this.packages.values()) {\n for (const ref of pkg.getCatalogReferences()) {\n catalogNames.add(ref.getCatalogName());\n }\n }\n\n return Array.from(catalogNames);\n }\n\n /**\n * Get all unique dependency names across all packages\n */\n public getAllDependencyNames(): string[] {\n const dependencyNames = new Set<string>();\n\n for (const pkg of this.packages.values()) {\n const deps = pkg.getDependencies();\n\n // Add dependencies from all types\n for (const depType of [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const) {\n for (const depName of deps.getDependenciesByType(depType).keys()) {\n dependencyNames.add(depName);\n }\n }\n }\n\n return Array.from(dependencyNames);\n }\n\n /**\n * Find packages that have a specific dependency\n */\n public findPackagesWithDependency(dependencyName: string): Package[] {\n return this.getAll().filter((pkg) => {\n const deps = pkg.getDependencies();\n return ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'].some(\n (depType) => deps.getDependenciesByType(depType as any).has(dependencyName)\n );\n });\n }\n\n /**\n * Validate all packages in the collection\n */\n public validate(): PackageCollectionValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for empty collection\n if (this.isEmpty()) {\n warnings.push('No packages found in workspace');\n }\n\n // Validate each package\n for (const pkg of this.packages.values()) {\n const result = pkg.validate();\n errors.push(...result.getErrors().map((err) => `Package \"${pkg.getName()}\": ${err}`));\n warnings.push(...result.getWarnings().map((warn) => `Package \"${pkg.getName()}\": ${warn}`));\n }\n\n // Check for duplicate package names (shouldn't happen with Map, but good to verify)\n const packageNames = this.getPackageNames();\n const uniqueNames = new Set(packageNames);\n if (packageNames.length !== uniqueNames.size) {\n errors.push('Duplicate package names found in collection');\n }\n\n return new PackageCollectionValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Group packages by workspace path\n */\n public groupByWorkspacePath(): Map<string, Package[]> {\n const grouped = new Map<string, Package[]>();\n\n for (const pkg of this.packages.values()) {\n const pathKey = pkg.getPath().toString();\n if (!grouped.has(pathKey)) {\n grouped.set(pathKey, []);\n }\n grouped.get(pathKey)!.push(pkg);\n }\n\n return grouped;\n }\n\n /**\n * Convert to a Map for serialization\n */\n public toMap(): Map<PackageName, Package> {\n return new Map(this.packages);\n }\n\n /**\n * Iterate over packages\n */\n public *[Symbol.iterator](): Iterator<[PackageName, Package]> {\n yield* this.packages;\n }\n\n /**\n * Check equality with another package collection\n */\n public equals(other: PackageCollection): boolean {\n if (this.size() !== other.size()) {\n return false;\n }\n\n for (const [name, pkg] of this.packages) {\n const otherPackage = other.get(name);\n if (!otherPackage || !pkg.equals(otherPackage)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Package Collection Validation Result\n */\nexport class PackageCollectionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * WorkspaceConfig Value Object\n *\n * Represents the configuration settings for a pnpm workspace.\n * Includes catalog mode, package patterns, and other workspace-specific settings.\n */\n\nimport { CatalogMode } from '../entities/catalog.js';\n\nexport class WorkspaceConfig {\n private readonly catalogMode: CatalogMode;\n private readonly packagePatterns: string[];\n private readonly catalogs: Map<string, CatalogDefinition>;\n private readonly shamefullyHoist: boolean;\n private readonly linkWorkspacePackages: boolean | 'deep';\n private readonly originalData: PnpmWorkspaceData;\n\n private constructor(\n catalogMode: CatalogMode,\n packagePatterns: string[],\n catalogs: Map<string, CatalogDefinition>,\n shamefullyHoist: boolean = false,\n linkWorkspacePackages: boolean | 'deep' = true,\n originalData: PnpmWorkspaceData = {} as PnpmWorkspaceData\n ) {\n this.catalogMode = catalogMode;\n this.packagePatterns = [...packagePatterns];\n this.catalogs = new Map(catalogs);\n this.shamefullyHoist = shamefullyHoist;\n this.linkWorkspacePackages = linkWorkspacePackages;\n this.originalData = { ...originalData };\n }\n\n /**\n * Create a WorkspaceConfig from pnpm-workspace.yaml data\n */\n public static fromWorkspaceData(data: PnpmWorkspaceData): WorkspaceConfig {\n const packagePatterns = data.packages || [];\n const catalogMode = data.catalogMode || CatalogMode.MANUAL;\n\n // Process catalogs\n const catalogs = new Map<string, CatalogDefinition>();\n\n // Add default catalog if exists\n if (data.catalog) {\n catalogs.set('default', new CatalogDefinition('default', data.catalog));\n }\n\n // Add named catalogs if they exist\n if (data.catalogs) {\n for (const [name, dependencies] of Object.entries(data.catalogs)) {\n catalogs.set(name, new CatalogDefinition(name, dependencies));\n }\n }\n\n return new WorkspaceConfig(\n catalogMode,\n packagePatterns,\n catalogs,\n data.shamefullyHoist,\n data.linkWorkspacePackages,\n data\n );\n }\n\n /**\n * Create a default WorkspaceConfig\n */\n public static createDefault(): WorkspaceConfig {\n const defaultData: PnpmWorkspaceData = {\n packages: ['packages/*'],\n };\n return new WorkspaceConfig(\n CatalogMode.MANUAL,\n ['packages/*'],\n new Map(),\n false,\n true,\n defaultData\n );\n }\n\n /**\n * Get catalog mode\n */\n public getCatalogMode(): CatalogMode {\n return this.catalogMode;\n }\n\n /**\n * Get package patterns\n */\n public getPackagePatterns(): string[] {\n return [...this.packagePatterns];\n }\n\n /**\n * Get catalog definitions\n */\n public getCatalogDefinitions(): Map<string, CatalogDefinition> {\n return new Map(this.catalogs);\n }\n\n /**\n * Get a specific catalog definition\n */\n public getCatalogDefinition(name: string): CatalogDefinition | undefined {\n return this.catalogs.get(name);\n }\n\n /**\n * Check if a catalog is defined\n */\n public hasCatalog(name: string): boolean {\n return this.catalogs.has(name);\n }\n\n /**\n * Get all catalog names\n */\n public getCatalogNames(): string[] {\n return Array.from(this.catalogs.keys());\n }\n\n /**\n * Check if shamefully hoist is enabled\n */\n public isShamefullyHoist(): boolean {\n return this.shamefullyHoist;\n }\n\n /**\n * Get link workspace packages setting\n */\n public getLinkWorkspacePackages(): boolean | 'deep' {\n return this.linkWorkspacePackages;\n }\n\n /**\n * Check if workspace has any catalogs\n */\n public hasCatalogs(): boolean {\n return this.catalogs.size > 0;\n }\n\n /**\n * Update a catalog dependency (creates a new WorkspaceConfig)\n */\n public updateCatalogDependency(\n catalogName: string,\n packageName: string,\n version: string\n ): WorkspaceConfig {\n const catalogDef = this.catalogs.get(catalogName);\n if (!catalogDef) {\n throw new Error(`Catalog \"${catalogName}\" not found`);\n }\n\n // Create updated catalog definition\n const updatedCatalogDef = catalogDef.updateDependencyVersion(packageName, version);\n\n // Create new catalogs map with the updated definition\n const updatedCatalogs = new Map(this.catalogs);\n updatedCatalogs.set(catalogName, updatedCatalogDef);\n\n // Return new WorkspaceConfig instance\n return new WorkspaceConfig(\n this.catalogMode,\n this.packagePatterns,\n updatedCatalogs,\n this.shamefullyHoist,\n this.linkWorkspacePackages,\n this.originalData\n );\n }\n\n /**\n * Get the default catalog definition\n */\n public getDefaultCatalog(): CatalogDefinition | undefined {\n return this.catalogs.get('default');\n }\n\n /**\n * Validate workspace configuration\n */\n public validate(): WorkspaceConfigValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate package patterns\n if (this.packagePatterns.length === 0) {\n warnings.push('No package patterns defined - workspace may not discover any packages');\n }\n\n // Validate package patterns format\n for (const pattern of this.packagePatterns) {\n if (!pattern || pattern.trim().length === 0) {\n errors.push('Empty package pattern found');\n }\n\n // Basic glob pattern validation\n if (pattern.includes('**') && pattern.indexOf('**') !== pattern.lastIndexOf('**')) {\n warnings.push(`Complex glob pattern may be inefficient: ${pattern}`);\n }\n }\n\n // Validate catalog definitions\n for (const [name, catalogDef] of this.catalogs) {\n const validationResult = catalogDef.validate();\n errors.push(...validationResult.getErrors().map((err) => `Catalog \"${name}\": ${err}`));\n warnings.push(...validationResult.getWarnings().map((warn) => `Catalog \"${name}\": ${warn}`));\n }\n\n // Check for conflicting settings\n if (this.catalogMode === CatalogMode.STRICT && this.catalogs.size === 0) {\n errors.push('Catalog mode is set to \"strict\" but no catalogs are defined');\n }\n\n return new WorkspaceConfigValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Convert to pnpm-workspace.yaml data format\n */\n public toPnpmWorkspaceData(): PnpmWorkspaceData {\n // Start with the original data to preserve all fields\n const data: PnpmWorkspaceData = { ...this.originalData };\n\n // Update the fields that we manage\n data.packages = this.packagePatterns;\n\n // Add catalog mode if not default\n if (this.catalogMode !== CatalogMode.MANUAL) {\n data.catalogMode = this.catalogMode;\n } else {\n // Remove catalogMode if it's back to default\n delete data.catalogMode;\n }\n\n // Update catalogs\n const defaultCatalog = this.catalogs.get('default');\n if (defaultCatalog) {\n data.catalog = defaultCatalog.getDependencies();\n } else {\n // Remove catalog if it no longer exists\n delete data.catalog;\n }\n\n const namedCatalogs: Record<string, Record<string, string>> = {};\n for (const [name, catalogDef] of this.catalogs) {\n if (name !== 'default') {\n namedCatalogs[name] = catalogDef.getDependencies();\n }\n }\n\n if (Object.keys(namedCatalogs).length > 0) {\n data.catalogs = namedCatalogs;\n } else {\n // Remove catalogs if none exist\n delete data.catalogs;\n }\n\n // Update other settings\n if (this.shamefullyHoist) {\n data.shamefullyHoist = this.shamefullyHoist;\n } else {\n // Remove if false/default\n delete data.shamefullyHoist;\n }\n\n if (this.linkWorkspacePackages !== true) {\n data.linkWorkspacePackages = this.linkWorkspacePackages;\n } else {\n // Remove if true/default\n delete data.linkWorkspacePackages;\n }\n\n return data;\n }\n\n /**\n * Check equality with another WorkspaceConfig\n */\n public equals(other: WorkspaceConfig): boolean {\n return (\n this.catalogMode === other.catalogMode &&\n JSON.stringify(this.packagePatterns) === JSON.stringify(other.packagePatterns) &&\n this.shamefullyHoist === other.shamefullyHoist &&\n this.linkWorkspacePackages === other.linkWorkspacePackages &&\n this.catalogsEqual(other.catalogs)\n );\n }\n\n /**\n * Check if catalog definitions are equal\n */\n private catalogsEqual(otherCatalogs: Map<string, CatalogDefinition>): boolean {\n if (this.catalogs.size !== otherCatalogs.size) {\n return false;\n }\n\n for (const [name, catalogDef] of this.catalogs) {\n const otherCatalogDef = otherCatalogs.get(name);\n if (!otherCatalogDef || !catalogDef.equals(otherCatalogDef)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Catalog Definition Value Object\n */\nexport class CatalogDefinition {\n private readonly name: string;\n private readonly dependencies: Record<string, string>;\n\n constructor(name: string, dependencies: Record<string, string>) {\n this.name = name;\n this.dependencies = { ...dependencies };\n }\n\n public getName(): string {\n return this.name;\n }\n\n public getDependencies(): Record<string, string> {\n return { ...this.dependencies };\n }\n\n public getDependencyNames(): string[] {\n return Object.keys(this.dependencies);\n }\n\n public hasDependency(packageName: string): boolean {\n return packageName in this.dependencies;\n }\n\n public getDependencyVersion(packageName: string): string | undefined {\n return this.dependencies[packageName];\n }\n\n /**\n * Update a dependency version (returns a new instance)\n */\n public updateDependencyVersion(packageName: string, version: string): CatalogDefinition {\n const updatedDependencies = { ...this.dependencies };\n updatedDependencies[packageName] = version;\n return new CatalogDefinition(this.name, updatedDependencies);\n }\n\n public validate(): CatalogDefinitionValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate name\n if (!this.name || this.name.trim().length === 0) {\n errors.push('Catalog name cannot be empty');\n }\n\n // Validate dependencies\n for (const [packageName, version] of Object.entries(this.dependencies)) {\n if (!packageName || packageName.trim().length === 0) {\n errors.push('Package name cannot be empty');\n }\n\n if (!version || version.trim().length === 0) {\n errors.push(`Version for package \"${packageName}\" cannot be empty`);\n }\n\n // Basic package name validation\n if (!/^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(packageName)) {\n warnings.push(`Package name \"${packageName}\" may not be valid`);\n }\n }\n\n return new CatalogDefinitionValidationResult(errors.length === 0, errors, warnings);\n }\n\n public equals(other: CatalogDefinition): boolean {\n return (\n this.name === other.name &&\n JSON.stringify(this.dependencies) === JSON.stringify(other.dependencies)\n );\n }\n}\n\n/**\n * pnpm-workspace.yaml data interface\n */\nexport interface PnpmWorkspaceData {\n packages: string[];\n catalog?: Record<string, string>;\n catalogs?: Record<string, Record<string, string>>;\n catalogMode?: CatalogMode;\n shamefullyHoist?: boolean;\n linkWorkspacePackages?: boolean | 'deep';\n [key: string]: any;\n}\n\n/**\n * Workspace Config Validation Result\n */\nexport class WorkspaceConfigValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n\n/**\n * Catalog Definition Validation Result\n */\nexport class CatalogDefinitionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * WorkspaceId Value Object\n *\n * Represents a unique identifier for a pnpm workspace.\n * This is an immutable value object that ensures workspace identity.\n */\n\nexport class WorkspaceId {\n private readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n /**\n * Create a WorkspaceId from a string value\n */\n public static fromString(value: string): WorkspaceId {\n if (!value || value.trim().length === 0) {\n throw new Error('WorkspaceId cannot be empty');\n }\n\n if (value.length > 255) {\n throw new Error('WorkspaceId cannot exceed 255 characters');\n }\n\n // Validate format - alphanumeric, hyphens, underscores only\n const validPattern = /^[a-zA-Z0-9_-]+$/;\n if (!validPattern.test(value.trim())) {\n throw new Error(\n 'WorkspaceId can only contain alphanumeric characters, hyphens, and underscores'\n );\n }\n\n return new WorkspaceId(value.trim());\n }\n\n /**\n * Generate a new unique WorkspaceId\n */\n public static generate(): WorkspaceId {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return new WorkspaceId(`workspace-${timestamp}-${random}`);\n }\n\n /**\n * Create a WorkspaceId from a workspace path\n */\n public static fromPath(path: string): WorkspaceId {\n // Extract a meaningful identifier from the path\n const normalizedPath = path.replace(/\\\\/g, '/');\n const pathParts = normalizedPath.split('/').filter(Boolean);\n const lastPart = pathParts[pathParts.length - 1] || 'workspace';\n\n // Sanitize the path part to create a valid ID\n const sanitized = lastPart\n .replace(/[^a-zA-Z0-9_-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n\n if (sanitized.length === 0) {\n return WorkspaceId.generate();\n }\n\n return new WorkspaceId(sanitized);\n }\n\n /**\n * Get the string value of this WorkspaceId\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Get the raw value\n */\n public getValue(): string {\n return this.value;\n }\n\n /**\n * Check equality with another WorkspaceId\n */\n public equals(other: WorkspaceId): boolean {\n return this.value === other.value;\n }\n\n /**\n * Check if this WorkspaceId is the same as another\n */\n public isSameAs(other: WorkspaceId): boolean {\n return this.equals(other);\n }\n\n /**\n * Get a hash code for this WorkspaceId\n */\n public hashCode(): number {\n let hash = 0;\n for (let i = 0; i < this.value.length; i++) {\n const char = this.value.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return hash;\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): WorkspaceId {\n return WorkspaceId.fromString(json);\n }\n}\n","/**\n * Cache System\n *\n * Provides caching capabilities for NPM registry responses and other expensive operations.\n * Supports both in-memory and file-based caching with TTL and size limits.\n */\n\nimport { writeFileSync, readFileSync, existsSync, mkdirSync, unlinkSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport { createHash } from 'crypto';\n\nexport interface CacheEntry<T = any> {\n key: string;\n value: T;\n timestamp: number;\n ttl: number; // Time to live in milliseconds\n size: number; // Estimated size in bytes\n}\n\nexport interface CacheOptions {\n ttl?: number; // Default TTL in milliseconds\n maxSize?: number; // Max total cache size in bytes\n maxEntries?: number; // Max number of entries\n persistToDisk?: boolean; // Whether to persist cache to disk\n cacheDir?: string; // Directory for file-based cache\n}\n\nexport interface CacheStats {\n totalEntries: number;\n totalSize: number;\n hitRate: number;\n missRate: number;\n hits: number;\n misses: number;\n}\n\nexport class Cache<T = any> {\n private entries = new Map<string, CacheEntry<T>>();\n private stats = {\n hits: 0,\n misses: 0,\n };\n\n private options: Required<CacheOptions>;\n\n constructor(name: string, options: CacheOptions = {}) {\n this.options = {\n ttl: options.ttl || 3600000, // 1 hour default\n maxSize: options.maxSize || 50 * 1024 * 1024, // 50MB default\n maxEntries: options.maxEntries || 1000,\n persistToDisk: options.persistToDisk || false,\n cacheDir: options.cacheDir || join(homedir(), '.pcu', 'cache', name),\n };\n\n if (this.options.persistToDisk) {\n this.loadFromDisk();\n }\n\n // Setup cleanup interval\n setInterval(() => this.cleanup(), 300000); // Clean every 5 minutes\n }\n\n /**\n * Get value from cache\n */\n get(key: string): T | undefined {\n const entry = this.entries.get(key);\n\n if (!entry) {\n this.stats.misses++;\n return undefined;\n }\n\n // Check if entry has expired\n if (Date.now() - entry.timestamp > entry.ttl) {\n this.entries.delete(key);\n this.stats.misses++;\n return undefined;\n }\n\n this.stats.hits++;\n return entry.value;\n }\n\n /**\n * Set value in cache\n */\n set(key: string, value: T, ttl?: number): void {\n const entryTtl = ttl || this.options.ttl;\n const size = this.estimateSize(value);\n\n const entry: CacheEntry<T> = {\n key,\n value,\n timestamp: Date.now(),\n ttl: entryTtl,\n size,\n };\n\n // Remove old entry if exists\n if (this.entries.has(key)) {\n this.entries.delete(key);\n }\n\n // Check size limits before adding\n this.ensureCapacity(size);\n\n this.entries.set(key, entry);\n\n if (this.options.persistToDisk) {\n this.saveToDisk(key, entry);\n }\n }\n\n /**\n * Check if key exists in cache\n */\n has(key: string): boolean {\n const entry = this.entries.get(key);\n\n if (!entry) {\n return false;\n }\n\n // Check if expired\n if (Date.now() - entry.timestamp > entry.ttl) {\n this.entries.delete(key);\n return false;\n }\n\n return true;\n }\n\n /**\n * Delete entry from cache\n */\n delete(key: string): boolean {\n const deleted = this.entries.delete(key);\n\n if (deleted && this.options.persistToDisk) {\n this.deleteFromDisk(key);\n }\n\n return deleted;\n }\n\n /**\n * Clear all cache entries\n */\n clear(): void {\n this.entries.clear();\n this.stats.hits = 0;\n this.stats.misses = 0;\n\n if (this.options.persistToDisk) {\n this.clearDisk();\n }\n }\n\n /**\n * Get cache statistics\n */\n getStats(): CacheStats {\n const total = this.stats.hits + this.stats.misses;\n\n return {\n totalEntries: this.entries.size,\n totalSize: this.getTotalSize(),\n hitRate: total > 0 ? this.stats.hits / total : 0,\n missRate: total > 0 ? this.stats.misses / total : 0,\n hits: this.stats.hits,\n misses: this.stats.misses,\n };\n }\n\n /**\n * Get or set with factory function\n */\n async getOrSet(key: string, factory: () => Promise<T> | T, ttl?: number): Promise<T> {\n const cached = this.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const value = await factory();\n this.set(key, value, ttl);\n\n return value;\n }\n\n /**\n * Cleanup expired entries\n */\n private cleanup(): void {\n const now = Date.now();\n const expiredKeys: string[] = [];\n\n for (const [key, entry] of this.entries) {\n if (now - entry.timestamp > entry.ttl) {\n expiredKeys.push(key);\n }\n }\n\n for (const key of expiredKeys) {\n this.delete(key);\n }\n }\n\n /**\n * Ensure cache capacity doesn't exceed limits\n */\n private ensureCapacity(newEntrySize: number): void {\n // Check entry count limit\n while (this.entries.size >= this.options.maxEntries) {\n this.evictOldest();\n }\n\n // Check size limit\n while (this.getTotalSize() + newEntrySize > this.options.maxSize) {\n this.evictOldest();\n }\n }\n\n /**\n * Evict oldest entry\n */\n private evictOldest(): void {\n let oldestKey: string | undefined;\n let oldestTimestamp = Date.now();\n\n for (const [key, entry] of this.entries) {\n if (entry.timestamp < oldestTimestamp) {\n oldestTimestamp = entry.timestamp;\n oldestKey = key;\n }\n }\n\n if (oldestKey) {\n this.delete(oldestKey);\n }\n }\n\n /**\n * Get total cache size\n */\n private getTotalSize(): number {\n let totalSize = 0;\n for (const entry of this.entries.values()) {\n totalSize += entry.size;\n }\n return totalSize;\n }\n\n /**\n * Estimate size of value in bytes\n */\n private estimateSize(value: T): number {\n try {\n return JSON.stringify(value).length * 2; // Rough UTF-16 estimate\n } catch {\n return 1000; // Default estimate for non-serializable values\n }\n }\n\n /**\n * Load cache from disk\n */\n private loadFromDisk(): void {\n try {\n if (!existsSync(this.options.cacheDir)) {\n return;\n }\n\n const indexPath = join(this.options.cacheDir, 'index.json');\n if (!existsSync(indexPath)) {\n return;\n }\n\n const indexContent = readFileSync(indexPath, 'utf-8');\n const index = JSON.parse(indexContent);\n\n for (const key of index.keys || []) {\n try {\n const entryPath = join(this.options.cacheDir, this.getFilename(key));\n if (existsSync(entryPath)) {\n const entryContent = readFileSync(entryPath, 'utf-8');\n const entry = JSON.parse(entryContent);\n\n // Check if entry is still valid\n if (Date.now() - entry.timestamp <= entry.ttl) {\n this.entries.set(key, entry);\n }\n }\n } catch {\n // Skip corrupted entries\n }\n }\n } catch {\n // Ignore disk loading errors\n }\n }\n\n /**\n * Save entry to disk\n */\n private saveToDisk(key: string, entry: CacheEntry<T>): void {\n try {\n if (!existsSync(this.options.cacheDir)) {\n mkdirSync(this.options.cacheDir, { recursive: true });\n }\n\n const entryPath = join(this.options.cacheDir, this.getFilename(key));\n writeFileSync(entryPath, JSON.stringify(entry), 'utf-8');\n\n // Update index\n this.updateDiskIndex();\n } catch {\n // Ignore disk saving errors\n }\n }\n\n /**\n * Delete entry from disk\n */\n private deleteFromDisk(key: string): void {\n try {\n const entryPath = join(this.options.cacheDir, this.getFilename(key));\n if (existsSync(entryPath)) {\n unlinkSync(entryPath);\n }\n this.updateDiskIndex();\n } catch {\n // Ignore disk deletion errors\n }\n }\n\n /**\n * Clear disk cache\n */\n private clearDisk(): void {\n try {\n if (existsSync(this.options.cacheDir)) {\n const fs = require('fs');\n fs.rmSync(this.options.cacheDir, { recursive: true, force: true });\n }\n } catch {\n // Ignore disk clearing errors\n }\n }\n\n /**\n * Update disk index\n */\n private updateDiskIndex(): void {\n try {\n const indexPath = join(this.options.cacheDir, 'index.json');\n const index = {\n keys: Array.from(this.entries.keys()),\n lastUpdated: Date.now(),\n };\n writeFileSync(indexPath, JSON.stringify(index), 'utf-8');\n } catch {\n // Ignore index update errors\n }\n }\n\n /**\n * Get filename for cache key\n */\n private getFilename(key: string): string {\n // Use hash to create safe filename\n const hash = createHash('md5').update(key).digest('hex');\n return `${hash}.json`;\n }\n}\n\n/**\n * Registry-specific cache for NPM API responses\n */\nexport class RegistryCache extends Cache<any> {\n constructor(options: CacheOptions = {}) {\n super('registry', {\n ttl: 3600000, // 1 hour\n maxSize: 10 * 1024 * 1024, // 10MB\n maxEntries: 500,\n persistToDisk: true,\n ...options,\n });\n }\n\n /**\n * Cache package info\n */\n setPackageInfo(packageName: string, info: any, ttl?: number): void {\n this.set(`package:${packageName}`, info, ttl);\n }\n\n /**\n * Get cached package info\n */\n getPackageInfo(packageName: string): any | undefined {\n return this.get(`package:${packageName}`);\n }\n\n /**\n * Cache version list\n */\n setVersions(packageName: string, versions: string[], ttl?: number): void {\n this.set(`versions:${packageName}`, versions, ttl);\n }\n\n /**\n * Get cached versions\n */\n getVersions(packageName: string): string[] | undefined {\n return this.get(`versions:${packageName}`);\n }\n\n /**\n * Cache security report\n */\n setSecurityReport(packageName: string, version: string, report: any, ttl?: number): void {\n this.set(`security:${packageName}:${version}`, report, ttl);\n }\n\n /**\n * Get cached security report\n */\n getSecurityReport(packageName: string, version: string): any | undefined {\n return this.get(`security:${packageName}:${version}`);\n }\n}\n\n/**\n * Workspace-specific cache for file system operations\n */\nexport class WorkspaceCache extends Cache<any> {\n constructor(options: CacheOptions = {}) {\n super('workspace', {\n ttl: 300000, // 5 minutes (shorter TTL for file system)\n maxSize: 5 * 1024 * 1024, // 5MB\n maxEntries: 200,\n persistToDisk: false, // Don't persist workspace cache\n ...options,\n });\n }\n\n /**\n * Cache workspace info\n */\n setWorkspaceInfo(workspacePath: string, info: any, ttl?: number): void {\n this.set(`workspace:${workspacePath}`, info, ttl);\n }\n\n /**\n * Get cached workspace info\n */\n getWorkspaceInfo(workspacePath: string): any | undefined {\n return this.get(`workspace:${workspacePath}`);\n }\n\n /**\n * Cache package.json content\n */\n setPackageJson(filePath: string, content: any, ttl?: number): void {\n this.set(`package-json:${filePath}`, content, ttl);\n }\n\n /**\n * Get cached package.json\n */\n getPackageJson(filePath: string): any | undefined {\n return this.get(`package-json:${filePath}`);\n }\n}\n\n// Export singleton instances\nexport const registryCache = new RegistryCache();\nexport const workspaceCache = new WorkspaceCache();\n","/**\n * File System Service\n *\n * Provides abstracted file system operations for the application.\n * Handles reading/writing workspace files, package.json, and pnpm-workspace.yaml.\n */\n\nimport fs from 'fs/promises';\nimport { glob } from 'glob';\nimport path from 'path';\nimport YAML from 'yaml';\nimport { PackageJsonData } from '../../domain/entities/package.js';\nimport { PnpmWorkspaceData } from '../../domain/value-objects/workspaceConfig.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\n\nexport class FileSystemService {\n /**\n * Check if a file exists\n */\n async exists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Check if a path is a directory\n */\n async isDirectory(dirPath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(dirPath);\n return stat.isDirectory();\n } catch {\n return false;\n }\n }\n\n /**\n * Read a text file\n */\n async readTextFile(filePath: string): Promise<string> {\n try {\n return await fs.readFile(filePath, 'utf-8');\n } catch (error) {\n throw new Error(`Failed to read file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a text file\n */\n async writeTextFile(filePath: string, content: string): Promise<void> {\n try {\n // Ensure directory exists\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, content, 'utf-8');\n } catch (error) {\n throw new Error(`Failed to write file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Read and parse a JSON file\n */\n async readJsonFile<T = any>(filePath: string): Promise<T> {\n try {\n const content = await this.readTextFile(filePath);\n return JSON.parse(content) as T;\n } catch (error) {\n throw new Error(`Failed to read JSON file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a JSON file\n */\n async writeJsonFile(filePath: string, data: any, indent: number = 2): Promise<void> {\n try {\n const content = JSON.stringify(data, null, indent);\n await this.writeTextFile(filePath, content);\n } catch (error) {\n throw new Error(`Failed to write JSON file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Read and parse a YAML file\n */\n async readYamlFile<T = any>(filePath: string): Promise<T> {\n try {\n const content = await this.readTextFile(filePath);\n return YAML.parse(content) as T;\n } catch (error) {\n throw new Error(`Failed to read YAML file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a YAML file\n */\n async writeYamlFile(filePath: string, data: any): Promise<void> {\n try {\n const content = YAML.stringify(data, {\n indent: 2,\n });\n await this.writeTextFile(filePath, content);\n } catch (error) {\n throw new Error(`Failed to write YAML file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a YAML file while preserving comments and formatting\n */\n async writeYamlFilePreservingFormat(filePath: string, data: any): Promise<void> {\n try {\n // Read the original file to preserve comments and formatting\n const originalContent = await this.readTextFile(filePath);\n\n // Use smart YAML updating that preserves comments and formatting\n const updatedContent = this.updateYamlPreservingFormat(originalContent, data);\n\n await this.writeTextFile(filePath, updatedContent);\n } catch (error) {\n // If reading the original file fails, fall back to regular YAML writing\n console.warn(\n `Could not preserve YAML format for ${filePath}, falling back to standard formatting`\n );\n await this.writeYamlFile(filePath, data);\n }\n }\n\n /**\n * Update YAML content while preserving comments and formatting\n */\n private updateYamlPreservingFormat(originalContent: string, newData: any): string {\n const lines = originalContent.split('\\n');\n const result: string[] = [];\n let i = 0;\n\n // Helper function to update a specific section\n const updateSection = (sectionName: string, newValue: any): boolean => {\n if (!(sectionName in newData)) {\n return false;\n }\n\n // Find the section in the original content\n let sectionStartIndex = -1;\n let sectionEndIndex = -1;\n let indentLevel = 0;\n\n for (let j = i; j < lines.length; j++) {\n const fullLine = lines[j];\n if (!fullLine) continue;\n\n const line = fullLine.trim();\n\n if (line.startsWith(`${sectionName}:`)) {\n sectionStartIndex = j;\n indentLevel = fullLine.length - fullLine.trimStart().length;\n\n // Find the end of this section\n for (let k = j + 1; k < lines.length; k++) {\n const nextLine = lines[k];\n if (!nextLine) continue;\n\n const nextLineTrimmed = nextLine.trim();\n const nextIndentLevel = nextLine.length - nextLine.trimStart().length;\n\n // If we find a line with same or less indentation that defines a new section, stop\n if (\n nextIndentLevel <= indentLevel &&\n nextLineTrimmed.includes(':') &&\n !nextLineTrimmed.startsWith('#')\n ) {\n sectionEndIndex = k - 1;\n break;\n }\n\n // If we find a line that's not empty, not indented enough to be part of this section, stop\n // Special case: comments at the same level after an empty line should end the section\n if (nextLineTrimmed !== '' && nextIndentLevel <= indentLevel) {\n if (nextLineTrimmed.startsWith('#') && nextIndentLevel === indentLevel) {\n // Check if there was an empty line before this comment\n let hasEmptyLineBefore = false;\n for (let m = k - 1; m > j; m--) {\n const prevLine = lines[m];\n if (!prevLine || prevLine.trim() === '') {\n hasEmptyLineBefore = true;\n break;\n }\n if (prevLine.trim() !== '') {\n break;\n }\n }\n if (hasEmptyLineBefore) {\n sectionEndIndex = k - 1;\n break;\n }\n } else if (!nextLineTrimmed.startsWith('#')) {\n sectionEndIndex = k - 1;\n break;\n }\n }\n }\n\n if (sectionEndIndex === -1) {\n sectionEndIndex = lines.length - 1;\n }\n break;\n }\n }\n\n if (sectionStartIndex !== -1) {\n // Update the section\n const sectionContent = this.formatYamlSection(\n sectionName,\n newValue,\n indentLevel,\n lines,\n sectionStartIndex,\n sectionEndIndex\n );\n\n // Add lines before the section\n for (let j = i; j < sectionStartIndex; j++) {\n const lineContent = lines[j];\n if (lineContent !== undefined) {\n result.push(lineContent);\n }\n }\n\n // Add the updated section\n result.push(...sectionContent);\n\n // Update the position to after this section\n i = sectionEndIndex + 1;\n return true;\n }\n\n return false;\n };\n\n // Process the file line by line\n while (i < lines.length) {\n const currentLine = lines[i];\n if (!currentLine) {\n result.push('');\n i++;\n continue;\n }\n\n const line = currentLine.trim();\n\n // Handle main sections\n if (line.startsWith('packages:')) {\n if (updateSection('packages', newData.packages)) {\n continue;\n }\n } else if (line.startsWith('catalog:')) {\n if (updateSection('catalog', newData.catalog)) {\n continue;\n }\n } else if (line.startsWith('catalogs:')) {\n if (updateSection('catalogs', newData.catalogs)) {\n continue;\n }\n } else if (line.startsWith('catalogMode:')) {\n if ('catalogMode' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length;\n result.push(' '.repeat(indent) + `catalogMode: ${newData.catalogMode}`);\n i++;\n continue;\n }\n } else if (line.startsWith('shamefullyHoist:')) {\n if ('shamefullyHoist' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length;\n result.push(' '.repeat(indent) + `shamefullyHoist: ${newData.shamefullyHoist}`);\n i++;\n continue;\n }\n } else if (line.startsWith('linkWorkspacePackages:')) {\n if ('linkWorkspacePackages' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length;\n result.push(\n ' '.repeat(indent) + `linkWorkspacePackages: ${newData.linkWorkspacePackages}`\n );\n i++;\n continue;\n }\n }\n\n // Keep the original line if not updated\n result.push(currentLine);\n i++;\n }\n\n return result.join('\\n');\n }\n\n /**\n * Format a YAML section with proper indentation while preserving internal structure\n */\n private formatYamlSection(\n sectionName: string,\n value: any,\n baseIndent: number = 0,\n originalLines?: string[],\n sectionStart?: number,\n sectionEnd?: number\n ): string[] {\n const lines: string[] = [];\n const indent = ' '.repeat(baseIndent);\n\n if (sectionName === 'packages' && Array.isArray(value)) {\n lines.push(`${indent}packages:`);\n for (const pkg of value) {\n lines.push(`${indent} - \"${pkg}\"`);\n }\n } else if (\n (sectionName === 'catalog' || sectionName === 'catalogs') &&\n typeof value === 'object'\n ) {\n if (sectionName === 'catalog') {\n lines.push(`${indent}catalog:`);\n\n // Try to preserve original structure and comments if available\n if (originalLines && sectionStart !== undefined && sectionEnd !== undefined) {\n const valueEntries = Object.entries(value);\n const processedPackages = new Set<string>();\n\n // First pass: update existing packages while preserving comments\n for (let i = sectionStart + 1; i <= sectionEnd; i++) {\n const line = originalLines[i];\n if (!line) continue;\n\n const trimmed = line.trim();\n\n // Preserve comments and empty lines\n if (trimmed.startsWith('#') || trimmed === '') {\n lines.push(line);\n continue;\n }\n\n // Check if this line defines a package (with or without quotes)\n const packageMatch = trimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/);\n if (packageMatch && packageMatch[2]) {\n const packageName = packageMatch[2];\n const newVersion = value[packageName];\n\n if (newVersion !== undefined) {\n // Update with new version while preserving indentation and quotes\n const originalIndent = line.length - line.trimStart().length;\n const quote = packageMatch[1] || ''; // Preserve original quote style\n lines.push(\n ' '.repeat(originalIndent) + `${quote}${packageName}${quote}: ${newVersion}`\n );\n processedPackages.add(packageName);\n } else {\n // Keep the line as is if package not in new data\n lines.push(line);\n }\n } else {\n // Keep other lines as is\n lines.push(line);\n }\n }\n\n // Second pass: add any new packages that weren't in the original\n for (const [pkg, version] of valueEntries) {\n if (!processedPackages.has(pkg)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n } else {\n // Fallback to simple formatting\n for (const [pkg, version] of Object.entries(value)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n } else {\n // Handle catalogs section with format preservation\n lines.push(`${indent}catalogs:`);\n\n if (originalLines && sectionStart !== undefined && sectionEnd !== undefined) {\n // Try to preserve original structure for catalogs section\n this.formatCatalogsSection(\n lines,\n value,\n baseIndent,\n originalLines,\n sectionStart,\n sectionEnd\n );\n } else {\n // Fallback to simple formatting\n for (const [catalogName, catalog] of Object.entries(value as Record<string, any>)) {\n lines.push(`${indent} ${catalogName}:`);\n for (const [pkg, version] of Object.entries(catalog)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n }\n }\n }\n\n return lines;\n }\n\n /**\n * Format catalogs section while preserving structure and comments\n */\n private formatCatalogsSection(\n lines: string[],\n value: Record<string, any>,\n baseIndent: number,\n originalLines: string[],\n sectionStart: number,\n sectionEnd: number\n ): void {\n const indent = ' '.repeat(baseIndent);\n const processedCatalogs = new Set<string>();\n\n let i = sectionStart + 1;\n while (i <= sectionEnd) {\n const line = originalLines[i];\n if (!line) {\n i++;\n continue;\n }\n\n const trimmed = line.trim();\n\n // Preserve comments and empty lines\n if (trimmed.startsWith('#') || trimmed === '') {\n lines.push(line);\n i++;\n continue;\n }\n\n // Check if this line defines a catalog\n const catalogMatch = trimmed.match(/^([a-zA-Z0-9\\-_.]+):\\s*$/);\n if (catalogMatch && catalogMatch[1]) {\n const catalogName = catalogMatch[1];\n const catalogData = value[catalogName];\n\n if (catalogData) {\n // This catalog exists in the new data\n const originalIndent = line.length - line.trimStart().length;\n lines.push(' '.repeat(originalIndent) + `${catalogName}:`);\n processedCatalogs.add(catalogName);\n\n // Process packages within this catalog\n i++;\n while (i <= sectionEnd) {\n const packageLine = originalLines[i];\n if (!packageLine) {\n i++;\n continue;\n }\n\n const packageTrimmed = packageLine.trim();\n const packageIndent = packageLine.length - packageLine.trimStart().length;\n\n // If we hit another catalog or section at same/lesser indent, break\n if (\n packageIndent <= originalIndent &&\n packageTrimmed !== '' &&\n !packageTrimmed.startsWith('#')\n ) {\n break;\n }\n\n // Preserve comments and empty lines\n if (packageTrimmed.startsWith('#') || packageTrimmed === '') {\n lines.push(packageLine);\n i++;\n continue;\n }\n\n // Check if this line defines a package\n const packageMatch = packageTrimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/);\n if (packageMatch && packageMatch[2]) {\n const packageName = packageMatch[2];\n const newVersion = catalogData[packageName];\n\n if (newVersion !== undefined) {\n // Update with new version while preserving indentation and quotes\n const quote = packageMatch[1] || '';\n lines.push(\n ' '.repeat(packageIndent) + `${quote}${packageName}${quote}: ${newVersion}`\n );\n } else {\n // Keep the line as is if package not in new data\n lines.push(packageLine);\n }\n } else {\n // Keep other lines as is\n lines.push(packageLine);\n }\n\n i++;\n }\n\n // Add any new packages that weren't in the original\n for (const [pkg, version] of Object.entries(catalogData)) {\n if (\n !this.packageExistsInCatalogSection(\n originalLines,\n sectionStart,\n sectionEnd,\n catalogName,\n pkg\n )\n ) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n } else {\n // This catalog doesn't exist in new data, keep as is\n lines.push(line);\n i++;\n }\n } else {\n // Not a catalog definition, keep as is\n lines.push(line);\n i++;\n }\n }\n\n // Add any new catalogs that weren't in the original\n for (const [catalogName, catalogData] of Object.entries(value)) {\n if (!processedCatalogs.has(catalogName)) {\n lines.push(`${indent} ${catalogName}:`);\n for (const [pkg, version] of Object.entries(catalogData)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n }\n }\n\n /**\n * Check if a package exists in a catalog section\n */\n private packageExistsInCatalogSection(\n lines: string[],\n sectionStart: number,\n sectionEnd: number,\n catalogName: string,\n packageName: string\n ): boolean {\n let foundCatalog = false;\n\n for (let i = sectionStart + 1; i <= sectionEnd; i++) {\n const line = lines[i];\n if (!line) continue;\n\n const trimmed = line.trim();\n\n // Check if we found the catalog\n if (trimmed === `${catalogName}:`) {\n foundCatalog = true;\n continue;\n }\n\n // If we found another catalog, stop\n if (foundCatalog && trimmed.match(/^[a-zA-Z0-9\\-_.]+:\\s*$/)) {\n break;\n }\n\n // If we're in the right catalog, check for the package\n if (foundCatalog) {\n const packageMatch = trimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/);\n if (packageMatch && packageMatch[2] === packageName) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Read pnpm-workspace.yaml configuration\n */\n async readPnpmWorkspaceConfig(workspacePath: WorkspacePath): Promise<PnpmWorkspaceData> {\n const configPath = workspacePath.getPnpmWorkspaceConfigPath().toString();\n\n if (!(await this.exists(configPath))) {\n throw new Error(`pnpm-workspace.yaml not found at ${configPath}`);\n }\n\n return await this.readYamlFile<PnpmWorkspaceData>(configPath);\n }\n\n /**\n * Write pnpm-workspace.yaml configuration\n */\n async writePnpmWorkspaceConfig(\n workspacePath: WorkspacePath,\n config: PnpmWorkspaceData\n ): Promise<void> {\n const configPath = workspacePath.getPnpmWorkspaceConfigPath().toString();\n await this.writeYamlFilePreservingFormat(configPath, config);\n }\n\n /**\n * Read package.json file\n */\n async readPackageJson(packagePath: WorkspacePath): Promise<PackageJsonData> {\n const packageJsonPath = packagePath.getPackageJsonPath().toString();\n\n if (!(await this.exists(packageJsonPath))) {\n throw new Error(`package.json not found at ${packageJsonPath}`);\n }\n\n return await this.readJsonFile<PackageJsonData>(packageJsonPath);\n }\n\n /**\n * Write package.json file\n */\n async writePackageJson(packagePath: WorkspacePath, packageData: PackageJsonData): Promise<void> {\n const packageJsonPath = packagePath.getPackageJsonPath().toString();\n await this.writeJsonFile(packageJsonPath, packageData);\n }\n\n /**\n * Find package.json files using glob patterns\n */\n async findPackageJsonFiles(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]> {\n const results: string[] = [];\n\n for (const pattern of patterns) {\n try {\n // Convert pattern to absolute path and look for package.json\n const absolutePattern = path.resolve(workspacePath.toString(), pattern, 'package.json');\n const matches = await glob(absolutePattern, {\n ignore: ['**/node_modules/**'],\n absolute: true,\n });\n results.push(...matches);\n } catch (error) {\n // Continue with other patterns if one fails\n console.warn(`Failed to process pattern ${pattern}:`, error);\n }\n }\n\n // Remove duplicates and return\n return Array.from(new Set(results));\n }\n\n /**\n * Find directories matching patterns\n */\n async findDirectories(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]> {\n const results: string[] = [];\n\n for (const pattern of patterns) {\n try {\n const absolutePattern = path.resolve(workspacePath.toString(), pattern);\n const matches = await glob(absolutePattern, {\n ignore: ['**/node_modules/**'],\n absolute: true,\n });\n results.push(...matches);\n } catch (error) {\n console.warn(`Failed to process pattern ${pattern}:`, error);\n }\n }\n\n return Array.from(new Set(results));\n }\n\n /**\n * Check if a directory contains a pnpm workspace\n */\n async isPnpmWorkspace(dirPath: string): Promise<boolean> {\n const workspaceConfigPath = path.join(dirPath, 'pnpm-workspace.yaml');\n const packageJsonPath = path.join(dirPath, 'package.json');\n\n // Must have both pnpm-workspace.yaml and package.json\n return (await this.exists(workspaceConfigPath)) && (await this.exists(packageJsonPath));\n }\n\n /**\n * Find the nearest pnpm workspace by traversing up the directory tree\n */\n async findNearestWorkspace(startPath: string): Promise<string | null> {\n let currentPath = path.resolve(startPath);\n\n while (currentPath !== path.dirname(currentPath)) {\n if (await this.isPnpmWorkspace(currentPath)) {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n }\n\n return null;\n }\n\n /**\n * Get file modification time\n */\n async getModificationTime(filePath: string): Promise<Date> {\n try {\n const stat = await fs.stat(filePath);\n return stat.mtime;\n } catch (error) {\n throw new Error(`Failed to get modification time for ${filePath}: ${error}`);\n }\n }\n\n /**\n * Create a backup of a file\n */\n async createBackup(filePath: string): Promise<string> {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const backupPath = `${filePath}.backup.${timestamp}`;\n\n try {\n await fs.copyFile(filePath, backupPath);\n return backupPath;\n } catch (error) {\n throw new Error(`Failed to create backup of ${filePath}: ${error}`);\n }\n }\n\n /**\n * Restore a file from backup\n */\n async restoreFromBackup(originalPath: string, backupPath: string): Promise<void> {\n try {\n await fs.copyFile(backupPath, originalPath);\n } catch (error) {\n throw new Error(`Failed to restore ${originalPath} from backup: ${error}`);\n }\n }\n\n /**\n * Remove a file\n */\n async removeFile(filePath: string): Promise<void> {\n try {\n await fs.unlink(filePath);\n } catch (error) {\n throw new Error(`Failed to remove file ${filePath}: ${error}`);\n }\n }\n\n /**\n * List files in a directory\n */\n async listFiles(dirPath: string): Promise<string[]> {\n try {\n const items = await fs.readdir(dirPath, { withFileTypes: true });\n return items.filter((item) => item.isFile()).map((item) => path.join(dirPath, item.name));\n } catch (error) {\n throw new Error(`Failed to list files in ${dirPath}: ${error}`);\n }\n }\n\n /**\n * List directories in a directory\n */\n async listDirectories(dirPath: string): Promise<string[]> {\n try {\n const items = await fs.readdir(dirPath, { withFileTypes: true });\n return items\n .filter((item) => item.isDirectory())\n .map((item) => path.join(dirPath, item.name));\n } catch (error) {\n throw new Error(`Failed to list directories in ${dirPath}: ${error}`);\n }\n }\n}\n","/**\n * File-based Workspace Repository Implementation\n *\n * Implements WorkspaceRepository interface using the file system.\n * Handles loading and saving workspace data from pnpm-workspace.yaml and package.json files.\n */\n\nimport path from 'path';\n\nimport { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js';\nimport { Workspace } from '../../domain/entities/workspace.js';\nimport { Package } from '../../domain/entities/package.js';\nimport { Catalog } from '../../domain/entities/catalog.js';\nimport { WorkspaceId } from '../../domain/value-objects/workspaceId.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\nimport { WorkspaceConfig } from '../../domain/value-objects/workspaceConfig.js';\nimport { CatalogCollection } from '../../domain/value-objects/catalogCollection.js';\nimport { PackageCollection } from '../../domain/value-objects/packageCollection.js';\nimport { FileSystemService } from '../file-system/fileSystemService.js';\n\nexport class FileWorkspaceRepository implements WorkspaceRepository {\n constructor(private readonly fileSystemService: FileSystemService) {}\n\n /**\n * Find a workspace by its path\n */\n async findByPath(path: WorkspacePath): Promise<Workspace | null> {\n try {\n // Check if the path contains a valid workspace\n if (!(await this.isValidWorkspace(path))) {\n return null;\n }\n\n // Load workspace configuration\n const config = await this.loadConfiguration(path);\n\n // Create workspace ID from path\n const id = WorkspaceId.fromPath(path.toString());\n\n // Load packages\n const packages = await this.loadPackages(path, config);\n\n // Load catalogs\n const catalogs = await this.loadCatalogs(config);\n\n return Workspace.create(id, path, config, catalogs, packages);\n } catch (error) {\n console.error(`Failed to load workspace from ${path.toString()}:`, error);\n return null;\n }\n }\n\n /**\n * Find a workspace by its ID\n */\n async findById(_id: WorkspaceId): Promise<Workspace | null> {\n // For file-based implementation, we would need to maintain a mapping\n // of IDs to paths. For now, this is not implemented.\n throw new Error('Finding workspace by ID is not implemented in file-based repository');\n }\n\n /**\n * Save a workspace\n */\n async save(workspace: Workspace): Promise<void> {\n try {\n // Save workspace configuration\n await this.saveConfiguration(workspace.getPath(), workspace.getConfig());\n\n // Save packages (update their package.json files)\n await this.savePackages(workspace.getPackages());\n } catch (error) {\n throw new Error(`Failed to save workspace: ${error}`);\n }\n }\n\n /**\n * Load workspace configuration from path\n */\n async loadConfiguration(path: WorkspacePath): Promise<WorkspaceConfig> {\n try {\n const workspaceData = await this.fileSystemService.readPnpmWorkspaceConfig(path);\n return WorkspaceConfig.fromWorkspaceData(workspaceData);\n } catch (error) {\n throw new Error(`Failed to load workspace configuration from ${path.toString()}: ${error}`);\n }\n }\n\n /**\n * Save workspace configuration to path\n */\n async saveConfiguration(path: WorkspacePath, config: WorkspaceConfig): Promise<void> {\n try {\n const workspaceData = config.toPnpmWorkspaceData();\n await this.fileSystemService.writePnpmWorkspaceConfig(path, workspaceData);\n } catch (error) {\n throw new Error(`Failed to save workspace configuration to ${path.toString()}: ${error}`);\n }\n }\n\n /**\n * Check if a path contains a valid pnpm workspace\n */\n async isValidWorkspace(path: WorkspacePath): Promise<boolean> {\n return await this.fileSystemService.isPnpmWorkspace(path.toString());\n }\n\n /**\n * Discover workspace from current working directory or given path\n */\n async discoverWorkspace(searchPath?: WorkspacePath): Promise<Workspace | null> {\n const startPath = searchPath?.toString() || process.cwd();\n\n try {\n const workspacePath = await this.fileSystemService.findNearestWorkspace(startPath);\n\n if (!workspacePath) {\n return null;\n }\n\n return await this.findByPath(WorkspacePath.fromString(workspacePath));\n } catch (error) {\n console.error(`Failed to discover workspace from ${startPath}:`, error);\n return null;\n }\n }\n\n /**\n * Load packages from workspace\n */\n private async loadPackages(\n workspacePath: WorkspacePath,\n config: WorkspaceConfig\n ): Promise<PackageCollection> {\n try {\n const packagePatterns = config.getPackagePatterns();\n\n // Find all package.json files matching the patterns\n const packageJsonFiles = await this.fileSystemService.findPackageJsonFiles(\n workspacePath,\n packagePatterns\n );\n\n const packages: Package[] = [];\n\n for (const packageJsonPath of packageJsonFiles) {\n try {\n const packageDir = path.dirname(packageJsonPath);\n const packagePath = WorkspacePath.fromString(packageDir);\n\n // Read package.json\n const packageData = await this.fileSystemService.readPackageJson(packagePath);\n\n // Create package\n const packageId = `${packageData.name}-${packageDir}`;\n const pkg = Package.create(packageId, packageData.name, packagePath, packageData);\n\n packages.push(pkg);\n } catch (error) {\n console.warn(`Failed to load package from ${packageJsonPath}:`, error);\n // Continue with other packages\n }\n }\n\n return PackageCollection.fromPackages(packages);\n } catch (error) {\n throw new Error(`Failed to load packages: ${error}`);\n }\n }\n\n /**\n * Load catalogs from workspace configuration\n */\n private async loadCatalogs(config: WorkspaceConfig): Promise<CatalogCollection> {\n try {\n const catalogs: Catalog[] = [];\n const catalogDefinitions = config.getCatalogDefinitions();\n\n for (const [catalogName, catalogDef] of catalogDefinitions) {\n const catalogId = `catalog-${catalogName}`;\n const catalog = Catalog.create(\n catalogId,\n catalogName,\n catalogDef.getDependencies(),\n config.getCatalogMode()\n );\n catalogs.push(catalog);\n }\n\n return CatalogCollection.fromCatalogs(catalogs);\n } catch (error) {\n throw new Error(`Failed to load catalogs: ${error}`);\n }\n }\n\n /**\n * Save packages (update their package.json files)\n */\n private async savePackages(packages: PackageCollection): Promise<void> {\n for (const pkg of packages.getAll()) {\n try {\n const packageData = pkg.toPackageJsonData();\n await this.fileSystemService.writePackageJson(pkg.getPath(), packageData);\n } catch (error) {\n console.error(`Failed to save package ${pkg.getName()}:`, error);\n // Continue with other packages\n }\n }\n }\n}\n","/**\n * Color Theme System\n *\n * Provides consistent color schemes and styling across the CLI\n */\n\nimport chalk from 'chalk';\n\nexport interface ColorTheme {\n // Brand colors\n primary: (text: string) => string;\n secondary: (text: string) => string;\n accent: (text: string) => string;\n\n // Semantic colors\n success: (text: string) => string;\n warning: (text: string) => string;\n error: (text: string) => string;\n info: (text: string) => string;\n\n // UI colors\n text: (text: string) => string;\n muted: (text: string) => string;\n border: (text: string) => string;\n background: (text: string) => string;\n\n // Status colors\n pending: (text: string) => string;\n processing: (text: string) => string;\n completed: (text: string) => string;\n\n // Version colors\n major: (text: string) => string;\n minor: (text: string) => string;\n patch: (text: string) => string;\n prerelease: (text: string) => string;\n\n // Risk levels\n riskHigh: (text: string) => string;\n riskMedium: (text: string) => string;\n riskLow: (text: string) => string;\n}\n\nexport class ThemeManager {\n private static currentTheme: ColorTheme;\n\n static themes = {\n default: {\n primary: (text: string) => chalk.hex('#0ea5e9')(text),\n secondary: (text: string) => chalk.hex('#8b5cf6')(text),\n accent: (text: string) => chalk.hex('#f59e0b')(text),\n\n success: (text: string) => chalk.green(text),\n warning: (text: string) => chalk.yellow(text),\n error: (text: string) => chalk.red(text),\n info: (text: string) => chalk.blue(text),\n\n text: (text: string) => chalk.white(text),\n muted: (text: string) => chalk.gray(text),\n border: (text: string) => chalk.dim(text),\n background: (text: string) => chalk.bgBlack(text),\n\n pending: (text: string) => chalk.cyan(text),\n processing: (text: string) => chalk.blue(text),\n completed: (text: string) => chalk.green(text),\n\n major: (text: string) => chalk.red(text),\n minor: (text: string) => chalk.yellow(text),\n patch: (text: string) => chalk.green(text),\n prerelease: (text: string) => chalk.magenta(text),\n\n riskHigh: (text: string) => chalk.red(text),\n riskMedium: (text: string) => chalk.yellow(text),\n riskLow: (text: string) => chalk.green(text),\n },\n\n modern: {\n primary: (text: string) => chalk.hex('#06b6d4')(text),\n secondary: (text: string) => chalk.hex('#ec4899')(text),\n accent: (text: string) => chalk.hex('#10b981')(text),\n\n success: (text: string) => chalk.hex('#10b981')(text),\n warning: (text: string) => chalk.hex('#f59e0b')(text),\n error: (text: string) => chalk.hex('#ef4444')(text),\n info: (text: string) => chalk.hex('#06b6d4')(text),\n\n text: (text: string) => chalk.hex('#e5e7eb')(text),\n muted: (text: string) => chalk.hex('#6b7280')(text),\n border: (text: string) => chalk.hex('#374151')(text),\n background: (text: string) => chalk.hex('#111827')(text),\n\n pending: (text: string) => chalk.hex('#06b6d4')(text),\n processing: (text: string) => chalk.hex('#3b82f6')(text),\n completed: (text: string) => chalk.hex('#10b981')(text),\n\n major: (text: string) => chalk.hex('#ef4444')(text),\n minor: (text: string) => chalk.hex('#f59e0b')(text),\n patch: (text: string) => chalk.hex('#10b981')(text),\n prerelease: (text: string) => chalk.hex('#8b5cf6')(text),\n\n riskHigh: (text: string) => chalk.hex('#ef4444')(text),\n riskMedium: (text: string) => chalk.hex('#f59e0b')(text),\n riskLow: (text: string) => chalk.hex('#10b981')(text),\n },\n\n minimal: {\n primary: (text: string) => chalk.white(text),\n secondary: (text: string) => chalk.gray(text),\n accent: (text: string) => chalk.white(text),\n\n success: (text: string) => chalk.green(text),\n warning: (text: string) => chalk.yellow(text),\n error: (text: string) => chalk.red(text),\n info: (text: string) => chalk.blue(text),\n\n text: (text: string) => chalk.white(text),\n muted: (text: string) => chalk.gray(text),\n border: (text: string) => chalk.gray(text),\n background: (text: string) => chalk.white(text),\n\n pending: (text: string) => chalk.blue(text),\n processing: (text: string) => chalk.blue(text),\n completed: (text: string) => chalk.green(text),\n\n major: (text: string) => chalk.red(text),\n minor: (text: string) => chalk.yellow(text),\n patch: (text: string) => chalk.green(text),\n prerelease: (text: string) => chalk.magenta(text),\n\n riskHigh: (text: string) => chalk.red(text),\n riskMedium: (text: string) => chalk.yellow(text),\n riskLow: (text: string) => chalk.green(text),\n },\n\n neon: {\n primary: (text: string) => chalk.hex('#00ffff')(text),\n secondary: (text: string) => chalk.hex('#ff00ff')(text),\n accent: (text: string) => chalk.hex('#ffff00')(text),\n\n success: (text: string) => chalk.hex('#00ff00')(text),\n warning: (text: string) => chalk.hex('#ffff00')(text),\n error: (text: string) => chalk.hex('#ff0000')(text),\n info: (text: string) => chalk.hex('#00ffff')(text),\n\n text: (text: string) => chalk.hex('#ffffff')(text),\n muted: (text: string) => chalk.hex('#808080')(text),\n border: (text: string) => chalk.hex('#404040')(text),\n background: (text: string) => chalk.hex('#000000')(text),\n\n pending: (text: string) => chalk.hex('#00ffff')(text),\n processing: (text: string) => chalk.hex('#0080ff')(text),\n completed: (text: string) => chalk.hex('#00ff00')(text),\n\n major: (text: string) => chalk.hex('#ff0000')(text),\n minor: (text: string) => chalk.hex('#ffff00')(text),\n patch: (text: string) => chalk.hex('#00ff00')(text),\n prerelease: (text: string) => chalk.hex('#ff00ff')(text),\n\n riskHigh: (text: string) => chalk.hex('#ff0000')(text),\n riskMedium: (text: string) => chalk.hex('#ffff00')(text),\n riskLow: (text: string) => chalk.hex('#00ff00')(text),\n },\n };\n\n static setTheme(themeName: keyof typeof ThemeManager.themes): void {\n this.currentTheme = this.themes[themeName];\n }\n\n static getTheme(): ColorTheme {\n return this.currentTheme || this.themes.default;\n }\n\n static listThemes(): string[] {\n return Object.keys(this.themes);\n }\n}\n\n/**\n * Styled text utilities\n */\nexport class StyledText {\n private static theme = ThemeManager.getTheme();\n\n static updateTheme(): void {\n this.theme = ThemeManager.getTheme();\n }\n\n // Brand styles\n static brand(text: string): string {\n return this.theme.primary(text);\n }\n\n static secondary(text: string): string {\n return this.theme.secondary(text);\n }\n\n static accent(text: string): string {\n return this.theme.accent(text);\n }\n\n // Semantic styles\n static success(text: string): string {\n return this.theme.success(text);\n }\n\n static warning(text: string): string {\n return this.theme.warning(text);\n }\n\n static error(text: string): string {\n return this.theme.error(text);\n }\n\n static info(text: string): string {\n return this.theme.info(text);\n }\n\n // UI styles\n static text(text: string): string {\n return this.theme.text(text);\n }\n\n static muted(text: string): string {\n return this.theme.muted(text);\n }\n\n static border(text: string): string {\n return this.theme.border(text);\n }\n\n // Status styles\n static pending(text: string): string {\n return this.theme.pending(text);\n }\n\n static processing(text: string): string {\n return this.theme.processing(text);\n }\n\n static completed(text: string): string {\n return this.theme.completed(text);\n }\n\n // Version styles\n static versionMajor(text: string): string {\n return this.theme.major(text);\n }\n\n static versionMinor(text: string): string {\n return this.theme.minor(text);\n }\n\n static versionPatch(text: string): string {\n return this.theme.patch(text);\n }\n\n static versionPrerelease(text: string): string {\n return this.theme.prerelease(text);\n }\n\n // Risk styles\n static riskHigh(text: string): string {\n return this.theme.riskHigh(text);\n }\n\n static riskMedium(text: string): string {\n return this.theme.riskMedium(text);\n }\n\n static riskLow(text: string): string {\n return this.theme.riskLow(text);\n }\n\n // Icons\n static icon(icon: string, text?: string): string {\n return text ? `${icon} ${text}` : icon;\n }\n\n static iconSuccess(text?: string): string {\n return this.icon('✅', text);\n }\n\n static iconWarning(text?: string): string {\n return this.icon('⚠️', text);\n }\n\n static iconError(text?: string): string {\n return this.icon('❌', text);\n }\n\n static iconInfo(text?: string): string {\n return this.icon('ℹ️', text);\n }\n\n static iconPackage(text?: string): string {\n return this.icon('📦', text);\n }\n\n static iconCatalog(text?: string): string {\n return this.icon('📋', text);\n }\n\n static iconUpdate(text?: string): string {\n return this.icon('🔄', text);\n }\n\n static iconSecurity(text?: string): string {\n return this.icon('🔒', text);\n }\n\n static iconAnalysis(text?: string): string {\n return this.icon('🔍', text);\n }\n\n static iconCheck(text?: string): string {\n return this.icon('✅', text);\n }\n\n static iconProgress(text?: string): string {\n return this.icon('⏳', text);\n }\n\n static iconComplete(text?: string): string {\n return this.icon('🎉', text);\n }\n}\n\n/**\n * Table styling utilities\n */\nexport class TableStyles {\n static createHeaderStyle(color: any) {\n return (text: string) => color.bold(text);\n }\n\n static createBorderStyle(color: any) {\n return (text: string) => color.dim(text);\n }\n\n static createCellStyle(color: any) {\n return (text: string) => color(text);\n }\n}\n\n/**\n * Theme configuration interface\n */\nexport interface ThemeConfig {\n name: string;\n colors: Partial<ColorTheme>;\n icons: Record<string, string>;\n styles: Record<string, any>;\n}\n\n/**\n * Theme presets for different use cases\n */\nexport const themePresets = {\n development: {\n name: 'development',\n description: 'Bright colors for development environments',\n theme: 'modern',\n },\n production: {\n name: 'production',\n description: 'Subtle colors for production environments',\n theme: 'minimal',\n },\n presentation: {\n name: 'presentation',\n description: 'High contrast colors for presentations',\n theme: 'neon',\n },\n default: {\n name: 'default',\n description: 'Balanced colors for general use',\n theme: 'default',\n },\n};\n","/**\n * Check Command\n *\n * CLI command to check for outdated catalog dependencies.\n * Provides detailed information about available updates.\n */\n\nimport { CatalogUpdateService, CheckOptions } from '@pcu/core';\nimport { OutputFormatter, OutputFormat } from '../formatters/outputFormatter.js';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\nimport { ConfigLoader } from '@pcu/utils';\n\nexport interface CheckCommandOptions {\n workspace?: string;\n catalog?: string;\n format?: OutputFormat;\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n prerelease?: boolean;\n include?: string[];\n exclude?: string[];\n verbose?: boolean;\n color?: boolean;\n}\n\nexport class CheckCommand {\n constructor(private readonly catalogUpdateService: CatalogUpdateService) {}\n\n /**\n * Execute the check command\n */\n async execute(options: CheckCommandOptions = {}): Promise<void> {\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n if (options.verbose) {\n console.log(StyledText.iconAnalysis('Checking for outdated catalog dependencies'));\n console.log(StyledText.muted(`Workspace: ${options.workspace || process.cwd()}`));\n\n if (options.catalog) {\n console.log(StyledText.muted(`Catalog: ${options.catalog}`));\n }\n\n if (options.target && options.target !== 'latest') {\n console.log(StyledText.muted(`Target: ${options.target}`));\n }\n\n console.log('');\n }\n\n // Load configuration file first\n const config = ConfigLoader.loadConfig(options.workspace || process.cwd());\n\n // Use format from CLI options first, then config file, then default\n const effectiveFormat = options.format || config.defaults?.format || 'table';\n\n // Create output formatter with effective format\n const formatter = new OutputFormatter(\n effectiveFormat as OutputFormat,\n options.color !== false\n );\n\n // Merge CLI options with configuration file settings\n const checkOptions: CheckOptions = {\n workspacePath: options.workspace,\n catalogName: options.catalog,\n target: options.target || config.defaults?.target || 'latest',\n includePrerelease: options.prerelease ?? config.defaults?.includePrerelease ?? false,\n // CLI include/exclude options take priority over config file\n include: options.include?.length ? options.include : config.include,\n exclude: options.exclude?.length ? options.exclude : config.exclude,\n };\n\n // Execute check\n const report = await this.catalogUpdateService.checkOutdatedDependencies(checkOptions);\n\n // Format and display results\n const formattedOutput = formatter.formatOutdatedReport(report);\n console.log(formattedOutput);\n\n // Show summary\n if (options.verbose || options.format === 'table') {\n this.showSummary(report, options);\n }\n\n // Always exit with 0 since this is just a check command\n // and finding updates is not an error condition\n process.exit(0);\n } catch (error) {\n console.error(StyledText.iconError('Error checking dependencies:'));\n console.error(StyledText.error(String(error)));\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'));\n console.error(StyledText.muted(error.stack || 'No stack trace available'));\n }\n\n process.exit(1);\n }\n }\n\n /**\n * Show command summary\n */\n private showSummary(report: any, _options: CheckCommandOptions): void {\n const lines: string[] = [];\n const theme = ThemeManager.getTheme();\n\n if (!report.hasUpdates) {\n lines.push(StyledText.iconSuccess('All catalog dependencies are up to date!'));\n } else {\n lines.push(StyledText.iconInfo('Summary:'));\n lines.push(` • ${report.totalOutdated} outdated dependencies found`);\n lines.push(` • ${report.catalogs.length} catalogs checked`);\n\n const totalPackages = report.catalogs.reduce(\n (sum: number, cat: any) => sum + cat.totalPackages,\n 0\n );\n lines.push(` • ${totalPackages} total catalog entries`);\n\n // Show breakdown by update type\n const updateTypes = { major: 0, minor: 0, patch: 0 };\n\n for (const catalog of report.catalogs) {\n for (const dep of catalog.outdatedDependencies) {\n updateTypes[dep.updateType as keyof typeof updateTypes]++;\n }\n }\n\n if (updateTypes.major > 0) {\n lines.push(theme.major(` • ${updateTypes.major} major updates`));\n }\n if (updateTypes.minor > 0) {\n lines.push(theme.minor(` • ${updateTypes.minor} minor updates`));\n }\n if (updateTypes.patch > 0) {\n lines.push(theme.patch(` • ${updateTypes.patch} patch updates`));\n }\n\n // Security updates\n const securityUpdates = report.catalogs.reduce((sum: number, cat: any) => {\n return sum + cat.outdatedDependencies.filter((dep: any) => dep.isSecurityUpdate).length;\n }, 0);\n\n if (securityUpdates > 0) {\n lines.push(StyledText.iconSecurity(`${securityUpdates} security updates`));\n }\n\n lines.push('');\n lines.push(StyledText.iconUpdate('Run with --update to apply updates'));\n\n if (updateTypes.major > 0) {\n lines.push(StyledText.iconWarning('Major updates may contain breaking changes'));\n }\n }\n\n console.log(lines.join('\\n'));\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: CheckCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal');\n }\n\n // Validate target\n if (\n options.target &&\n !['latest', 'greatest', 'minor', 'patch', 'newest'].includes(options.target)\n ) {\n errors.push('Invalid target. Must be one of: latest, greatest, minor, patch, newest');\n }\n\n // Validate include/exclude patterns\n if (options.include && options.include.some((pattern) => !pattern.trim())) {\n errors.push('Include patterns cannot be empty');\n }\n\n if (options.exclude && options.exclude.some((pattern) => !pattern.trim())) {\n errors.push('Exclude patterns cannot be empty');\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nCheck for outdated catalog dependencies\n\nUsage:\n pcu check [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --catalog <name> Check specific catalog only\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --target <type> Update target: latest, greatest, minor, patch, newest (default: latest)\n --prerelease Include prerelease versions\n --include <pattern> Include packages matching pattern (can be used multiple times)\n --exclude <pattern> Exclude packages matching pattern (can be used multiple times)\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu check # Check all catalogs\n pcu check --catalog react17 # Check specific catalog\n pcu check --target minor # Check for minor updates only\n pcu check --format json # Output as JSON\n pcu check --include \"react*\" # Include only React packages\n pcu check --exclude \"@types/*\" # Exclude TypeScript types\n\nExit Codes:\n 0 All dependencies are up to date\n 1 Updates are available\n 2 Error occurred\n `;\n }\n}\n","/**\n * Enhanced Progress Bar\n *\n * Provides beautiful progress indicators for CLI operations\n * with multiple styles and themes.\n */\n\nimport chalk from 'chalk';\n\nexport interface ProgressBarOptions {\n text?: string;\n total?: number;\n style?: 'default' | 'gradient' | 'fancy' | 'minimal' | 'rainbow' | 'neon';\n showSpeed?: boolean;\n}\n\nexport class ProgressBar {\n private percentageBar: PercentageProgressBar | null = null;\n private current = 0;\n private total = 0;\n private text = '';\n private startTime: number = 0;\n private style: string;\n private showSpeed: boolean;\n\n constructor(options: ProgressBarOptions = {}) {\n this.text = options.text || 'Processing...';\n this.total = options.total || 0;\n this.style = options.style || 'default';\n this.showSpeed = options.showSpeed ?? true;\n }\n\n /**\n * Start the progress bar\n */\n start(text?: string): void {\n this.text = text || this.text;\n this.startTime = Date.now();\n\n // 在开始新进度条前,彻底清理可能的残留内容\n this.clearPreviousOutput();\n\n // 强制使用percentageBar,即使没有total也要创建\n // 这样可以避免spinner导致的冲突问题\n const effectiveTotal = this.total > 0 ? this.total : 1; // 如果没有total,设为1避免除零错误\n\n this.percentageBar = new PercentageProgressBar(40, {\n style: this.style,\n showStats: this.showSpeed,\n multiLine: true, // 使用多行模式减少闪烁\n });\n this.percentageBar.start(effectiveTotal, this.text);\n }\n\n /**\n * Update progress with text\n */\n update(text: string, current?: number, total?: number): void {\n this.text = text;\n if (current !== undefined) this.current = current;\n if (total !== undefined) this.total = total;\n\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar.update(this.current, text);\n }\n }\n\n /**\n * Increment progress\n */\n increment(amount = 1, text?: string): void {\n this.current += amount;\n if (text) this.text = text;\n\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar.update(this.current, text);\n }\n }\n\n /**\n * Mark as succeeded\n */\n succeed(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const successText = text || this.getCompletionText();\n this.percentageBar.complete(successText);\n console.log(this.getSuccessMessage(successText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Mark as failed\n */\n fail(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const failText = text || this.getFailureText();\n console.log(this.getFailureMessage(failText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Get styled success message\n */\n private getSuccessMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.magenta.bold('✨')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.cyan('🎉')} ${chalk.green.bold(text)} ${chalk.cyan('🎉')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.green(text);\n case 'rainbow':\n return `${chalk.magenta('🌈')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.green.bold('⚡ SUCCESS')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.green('✅')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Get styled failure message\n */\n private getFailureMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.red.bold('💥')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.red('💔')} ${chalk.red.bold(text)} ${chalk.red('💔')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.red(text);\n case 'rainbow':\n return `${chalk.red('⚠️')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.red.bold('⚡ ERROR')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.red('❌')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Get completion text with stats\n */\n private getCompletionText(): string {\n const elapsed = this.getElapsedTime();\n const speed = this.getAverageSpeed();\n return `${this.text} completed ${speed} ${elapsed}`;\n }\n\n /**\n * Get failure text\n */\n private getFailureText(): string {\n return `${this.text} failed`;\n }\n\n /**\n * Get elapsed time formatted\n */\n private getElapsedTime(): string {\n const elapsed = Date.now() - this.startTime;\n if (elapsed < 1000) return `(${elapsed}ms)`;\n if (elapsed < 60000) return `(${(elapsed / 1000).toFixed(1)}s)`;\n return `(${Math.floor(elapsed / 60000)}m ${Math.floor((elapsed % 60000) / 1000)}s)`;\n }\n\n /**\n * Get average processing speed\n */\n private getAverageSpeed(): string {\n const elapsed = Date.now() - this.startTime;\n if (elapsed === 0 || this.current === 0) return '';\n const speed = Math.round((this.current / elapsed) * 1000);\n return speed > 0 ? `(${speed}/s)` : '';\n }\n\n /**\n * Mark as warning\n */\n warn(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const warnText = text || this.text;\n console.log(this.getWarningMessage(warnText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Mark as info\n */\n info(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const infoText = text || this.text;\n console.log(this.getInfoMessage(infoText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Get styled warning message\n */\n private getWarningMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.yellow.bold('⚡')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.yellow('⚠️')} ${chalk.yellow.bold(text)} ${chalk.yellow('⚠️')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.yellow(text);\n case 'rainbow':\n return `${chalk.yellow('⚠️')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.yellow.bold('⚡ WARNING')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.yellow('⚠️')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Get styled info message\n */\n private getInfoMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.blue.bold('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.blue('💡')} ${chalk.blue.bold(text)} ${chalk.blue('💡')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.blue(text);\n case 'rainbow':\n return `${chalk.blue('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.blue.bold('⚡ INFO')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.blue('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Stop the progress bar\n */\n stop(): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar = null;\n }\n }\n\n /**\n * Clear previous output to prevent residual progress bars\n */\n private clearPreviousOutput(): void {\n // 清理可能的残留进度条显示(最多清理5行,应该足够了)\n for (let i = 0; i < 5; i++) {\n process.stdout.write('\\x1b[1A\\r\\x1b[K'); // 上移一行并清除\n }\n // 确保光标在正确位置\n process.stdout.write('\\r');\n }\n\n /**\n * Create a multi-step progress indicator\n */\n static createMultiStep(steps: string[]): MultiStepProgress {\n return new MultiStepProgress(steps);\n }\n\n /**\n * Create a beautiful gradient progress bar\n */\n static createGradient(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'gradient',\n showSpeed: true,\n ...options,\n });\n }\n\n /**\n * Create a fancy progress bar with decorations\n */\n static createFancy(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'fancy',\n showSpeed: true,\n ...options,\n });\n }\n\n /**\n * Create a minimal clean progress bar\n */\n static createMinimal(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'minimal',\n showSpeed: false,\n ...options,\n });\n }\n\n /**\n * Create a rainbow themed progress bar\n */\n static createRainbow(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'rainbow',\n showSpeed: true,\n ...options,\n });\n }\n\n /**\n * Create a neon style progress bar\n */\n static createNeon(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'neon',\n showSpeed: true,\n ...options,\n });\n }\n}\n\n/**\n * Multi-step progress indicator\n */\nexport class MultiStepProgress {\n private currentStep = 0;\n private steps: string[] = [];\n\n constructor(steps: string[]) {\n this.steps = steps;\n }\n\n start(): void {\n console.log(chalk.bold('\\n📋 Progress Steps:\\n'));\n this.renderSteps();\n }\n\n next(text?: string): void {\n if (this.currentStep < this.steps.length) {\n const stepText = text || this.steps[this.currentStep];\n console.log(` ${chalk.green('✓')} ${stepText}`);\n this.currentStep++;\n\n if (this.currentStep < this.steps.length) {\n console.log(` ${chalk.cyan('→')} ${this.steps[this.currentStep]}`);\n }\n }\n }\n\n complete(): void {\n console.log(chalk.green('\\n🎉 All steps completed!\\n'));\n }\n\n private renderSteps(): void {\n this.steps.forEach((step, index) => {\n const prefix = index === 0 ? chalk.cyan('→') : ' ';\n const style = index < this.currentStep ? chalk.green : chalk.gray;\n console.log(` ${prefix} ${style(step)}`);\n });\n console.log('');\n }\n}\n\n/**\n * Progress bar with percentage and beautiful visual effects\n */\nexport class PercentageProgressBar {\n private current = 0;\n private total = 0;\n private text = '';\n private lastRender = '';\n private startTime = 0;\n private style: string;\n private useMultiLine = true;\n private isFirstRender = true;\n\n constructor(\n private readonly width = 40,\n private readonly options: { style?: string; showStats?: boolean; multiLine?: boolean } = {}\n ) {\n this.style = options.style || 'gradient';\n this.useMultiLine = options.multiLine ?? true; // 默认使用多行模式来减少闪烁\n }\n\n start(total: number, text: string): void {\n this.total = total;\n this.current = 0;\n this.text = text;\n this.startTime = Date.now();\n this.isFirstRender = true; // 重置首次渲染标记\n\n // 清理可能的残留输出\n this.clearPreviousLines();\n\n this.render();\n }\n\n /**\n * Clear any previous output lines to prevent conflicts\n */\n private clearPreviousLines(): void {\n // 更强力的清理:清理多行可能的残留内容\n for (let i = 0; i < 6; i++) {\n process.stdout.write('\\x1b[1A\\r\\x1b[2K'); // 上移一行并完全清除该行\n }\n // 回到起始位置\n process.stdout.write('\\r');\n }\n\n update(current: number, text?: string): void {\n this.current = current;\n if (text) this.text = text;\n this.render();\n }\n\n increment(amount = 1, text?: string): void {\n this.current += amount;\n if (text) this.text = text;\n this.render();\n }\n\n complete(text?: string): void {\n this.current = this.total;\n if (text) this.text = text;\n this.render();\n console.log(''); // New line after completion\n }\n\n private render(): void {\n const percentage = Math.round((this.current / this.total) * 100);\n const filledWidth = Math.round((this.current / this.total) * this.width);\n const emptyWidth = this.width - filledWidth;\n\n if (this.useMultiLine) {\n this.renderMultiLine(percentage, filledWidth, emptyWidth);\n } else {\n this.renderSingleLine(percentage, filledWidth, emptyWidth);\n }\n }\n\n private renderMultiLine(percentage: number, filledWidth: number, emptyWidth: number): void {\n const currentText = `${this.getStyledPrefix()} ${this.text}`;\n\n // 构建进度条\n let bar: string;\n switch (this.style) {\n case 'gradient':\n bar = this.renderGradientBar(filledWidth, emptyWidth);\n break;\n case 'fancy':\n bar = this.renderFancyBar(filledWidth, emptyWidth);\n break;\n case 'minimal':\n bar = this.renderMinimalBar(filledWidth, emptyWidth);\n break;\n case 'blocks':\n bar = this.renderBlockBar(filledWidth, emptyWidth);\n break;\n default:\n bar = this.renderDefaultBar(filledWidth, emptyWidth);\n }\n\n let progressLine = `(${this.current}/${this.total}) [${bar}] ${this.getStyledPercentage(percentage)}`;\n\n // Add stats if enabled\n if (this.options.showStats && this.startTime > 0) {\n const elapsed = Date.now() - this.startTime;\n const speed = elapsed > 0 ? Math.round((this.current / elapsed) * 1000) : 0;\n if (speed > 0) {\n progressLine += ` ${chalk.gray(`${speed}/s`)}`;\n }\n }\n\n if (this.isFirstRender) {\n // 第一次渲染:输出两行\n console.log(currentText);\n console.log(progressLine);\n this.isFirstRender = false;\n } else {\n // 后续更新:回到两行前的位置,分别更新这两行\n // 光标上移两行,清除文字行,输出新文字行\n process.stdout.write('\\x1b[2A\\r\\x1b[2K' + currentText + '\\n');\n // 清除进度条行,输出新进度条行\n process.stdout.write('\\r\\x1b[2K' + progressLine);\n }\n\n this.lastRender = progressLine;\n\n if (this.current >= this.total) {\n process.stdout.write('\\n');\n }\n }\n\n private renderSingleLine(percentage: number, filledWidth: number, emptyWidth: number): void {\n let bar: string;\n switch (this.style) {\n case 'gradient':\n bar = this.renderGradientBar(filledWidth, emptyWidth);\n break;\n case 'fancy':\n bar = this.renderFancyBar(filledWidth, emptyWidth);\n break;\n case 'minimal':\n bar = this.renderMinimalBar(filledWidth, emptyWidth);\n break;\n case 'blocks':\n bar = this.renderBlockBar(filledWidth, emptyWidth);\n break;\n default:\n bar = this.renderDefaultBar(filledWidth, emptyWidth);\n }\n\n let progressText = `${this.getStyledPrefix()} ${this.text} (${this.current}/${this.total}) [${bar}] ${this.getStyledPercentage(percentage)}`;\n\n // Add stats if enabled\n if (this.options.showStats && this.startTime > 0) {\n const elapsed = Date.now() - this.startTime;\n const speed = elapsed > 0 ? Math.round((this.current / elapsed) * 1000) : 0;\n if (speed > 0) {\n progressText += ` ${chalk.gray(`${speed}/s`)}`;\n }\n }\n\n // Clear previous line and render new one\n if (this.lastRender) {\n process.stdout.write('\\r\\x1b[K');\n }\n\n process.stdout.write(progressText);\n this.lastRender = progressText;\n\n if (this.current >= this.total) {\n process.stdout.write('\\n');\n }\n }\n\n private renderGradientBar(filledWidth: number, emptyWidth: number): string {\n const colors = [chalk.red, chalk.yellow, chalk.green, chalk.cyan, chalk.blue, chalk.magenta];\n\n let filledBar = '';\n for (let i = 0; i < filledWidth; i++) {\n const colorIndex = Math.floor((i / this.width) * colors.length);\n const colorFn = colors[Math.min(colorIndex, colors.length - 1)];\n if (colorFn) {\n filledBar += colorFn('█');\n }\n }\n\n const emptyBar = chalk.gray('░'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderFancyBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.cyan('▓'.repeat(filledWidth));\n const emptyBar = chalk.gray('░'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderMinimalBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.white('━'.repeat(filledWidth));\n const emptyBar = chalk.gray('─'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderBlockBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.green('■'.repeat(filledWidth));\n const emptyBar = chalk.gray('□'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderDefaultBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.green('█'.repeat(filledWidth));\n const emptyBar = chalk.gray('░'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private getStyledPrefix(): string {\n switch (this.style) {\n case 'gradient':\n return chalk.magenta('▶');\n case 'fancy':\n return chalk.cyan('★');\n case 'minimal':\n return chalk.gray('•');\n case 'blocks':\n return chalk.green('◆');\n default:\n return chalk.cyan('●');\n }\n }\n\n private getStyledPercentage(percentage: number): string {\n if (percentage < 25) return chalk.red.bold(`${percentage}%`);\n if (percentage < 50) return chalk.yellow.bold(`${percentage}%`);\n if (percentage < 75) return chalk.blue.bold(`${percentage}%`);\n if (percentage < 100) return chalk.cyan.bold(`${percentage}%`);\n return chalk.green.bold(`${percentage}%`);\n }\n\n /**\n * Create a gradient percentage progress bar\n */\n static createGradient(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, {\n style: 'gradient',\n showStats: true,\n multiLine: true,\n });\n }\n\n /**\n * Create a fancy percentage progress bar\n */\n static createFancy(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, { style: 'fancy', showStats: true, multiLine: true });\n }\n\n /**\n * Create a minimal percentage progress bar\n */\n static createMinimal(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, {\n style: 'minimal',\n showStats: false,\n multiLine: true,\n });\n }\n\n /**\n * Create a block-style percentage progress bar\n */\n static createBlocks(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, { style: 'blocks', showStats: true, multiLine: true });\n }\n}\n\n/**\n * Progress manager for batch operations\n */\nexport class BatchProgressManager {\n private bars: Map<string, ProgressBar> = new Map();\n private totalOperations = 0;\n private completedOperations = 0;\n\n createBar(id: string, options?: ProgressBarOptions): ProgressBar {\n const bar = new ProgressBar(options);\n this.bars.set(id, bar);\n return bar;\n }\n\n getBar(id: string): ProgressBar | undefined {\n return this.bars.get(id);\n }\n\n setTotal(total: number): void {\n this.totalOperations = total;\n }\n\n updateOverall(text: string): void {\n const percentage =\n this.totalOperations > 0\n ? Math.round((this.completedOperations / this.totalOperations) * 100)\n : 0;\n\n console.log(\n chalk.cyan(\n `📊 Overall Progress: ${percentage}% (${this.completedOperations}/${this.totalOperations})`\n )\n );\n if (text) {\n console.log(chalk.gray(` → ${text}`));\n }\n }\n\n completeOperation(text?: string): void {\n this.completedOperations++;\n if (text) {\n this.updateOverall(text);\n }\n }\n\n cleanup(): void {\n this.bars.forEach((bar) => bar.stop());\n this.bars.clear();\n }\n}\n","/**\n * Interactive Prompts\n *\n * Provides smart prompts and auto-completion for CLI commands\n */\n\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { FileSystemService } from '@pcu/core';\nimport { StyledText } from '../themes/colorTheme.js';\n\nexport interface AutoCompleteOption {\n name: string;\n value: string;\n description?: string;\n}\n\nexport class InteractivePrompts {\n private fsService: FileSystemService;\n\n constructor() {\n this.fsService = new FileSystemService();\n }\n\n /**\n * Interactive package selection with search\n */\n async selectPackages(\n packages: Array<{ name: string; current: string; latest: string; type: string }>\n ): Promise<string[]> {\n if (packages.length === 0) {\n return [];\n }\n\n const choices = packages.map((pkg) => ({\n name: this.formatPackageChoice(pkg),\n value: pkg.name,\n checked: false,\n }));\n\n const answers = await inquirer.prompt({\n type: 'checkbox',\n name: 'selectedPackages',\n message: StyledText.iconPackage('Select packages to update:'),\n choices,\n pageSize: 15,\n validate: (input: unknown) => {\n const selected = input as string[];\n return selected.length > 0 || 'Please select at least one package';\n },\n });\n\n return answers.selectedPackages;\n }\n\n /**\n * Interactive catalog selection\n */\n async selectCatalog(catalogs: string[]): Promise<string | null> {\n if (catalogs.length === 0) {\n return null;\n }\n\n if (catalogs.length === 1) {\n return catalogs[0] ?? null;\n }\n\n const choices = [\n { name: 'All catalogs', value: 'all' },\n ...catalogs.map((name) => ({ name, value: name })),\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'catalog',\n message: StyledText.iconCatalog('Select catalog to update:'),\n choices,\n pageSize: 10,\n },\n ]);\n\n return answers.catalog === 'all' ? null : answers.catalog;\n }\n\n /**\n * Update strategy selection\n */\n async selectUpdateStrategy(): Promise<string> {\n const strategies = [\n { name: 'Latest (recommended)', value: 'latest' },\n { name: 'Greatest (highest version)', value: 'greatest' },\n { name: 'Minor (non-breaking)', value: 'minor' },\n { name: 'Patch (bug fixes only)', value: 'patch' },\n { name: 'Newest (latest release)', value: 'newest' },\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'strategy',\n message: StyledText.iconUpdate('Select update strategy:'),\n choices: strategies,\n },\n ]);\n\n return answers.strategy;\n }\n\n /**\n * Confirm dangerous operations\n */\n async confirmDangerousOperation(operation: string, details?: string): Promise<boolean> {\n console.log('');\n if (details) {\n console.log(chalk.yellow('⚠️ Warning:'), details);\n }\n\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirmed',\n message: StyledText.warning(`Are you sure you want to ${operation}?`),\n default: false,\n },\n ]);\n\n return answers.confirmed;\n }\n\n /**\n * Auto-complete for package names (using list as fallback)\n */\n async autoCompletePackage(\n packages: string[],\n message: string = 'Select package:'\n ): Promise<string> {\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'package',\n message,\n choices: packages.map((pkg) => ({ name: pkg, value: pkg })),\n pageSize: 10,\n },\n ]);\n\n return answers.package;\n }\n\n /**\n * Workspace path selection with auto-complete\n */\n async selectWorkspacePath(): Promise<string> {\n const currentDir = process.cwd();\n const choices = [\n { name: `Current directory (${currentDir})`, value: currentDir },\n { name: 'Browse for directory...', value: 'browse' },\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'path',\n message: StyledText.icon('📁', 'Select workspace directory:'),\n choices,\n },\n ]);\n\n if (answers.path === 'browse') {\n return this.browseDirectory();\n }\n\n return answers.path;\n }\n\n /**\n * Browse directory structure\n */\n private async browseDirectory(currentPath = process.cwd()): Promise<string> {\n const directoryNames = await this.fsService.listDirectories(currentPath);\n const choices = [\n { name: '.. (parent directory)', value: '..' },\n { name: `. (current: ${currentPath})`, value: '.' },\n ...directoryNames.map((name: string) => ({\n name: `📁 ${name}`,\n value: `${currentPath}/${name}`,\n })),\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'selected',\n message: `Browse: ${currentPath}`,\n choices,\n pageSize: 15,\n },\n ]);\n\n if (answers.selected === '.') {\n return currentPath;\n }\n\n if (answers.selected === '..') {\n const parent = currentPath.split('/').slice(0, -1).join('/') || '/';\n return this.browseDirectory(parent);\n }\n\n // Check if this directory contains a pnpm workspace\n const workspaceFiles = ['pnpm-workspace.yaml', 'pnpm-workspace.yml'];\n let hasWorkspace = false;\n for (const file of workspaceFiles) {\n if (await this.fsService.exists(`${answers.selected}/${file}`)) {\n hasWorkspace = true;\n break;\n }\n }\n\n if (hasWorkspace) {\n const confirm = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'useThis',\n message: `Use ${answers.selected} as workspace?`,\n default: true,\n },\n ]);\n\n if (confirm.useThis) {\n return answers.selected;\n }\n }\n\n return this.browseDirectory(answers.selected);\n }\n\n /**\n * Multi-step configuration wizard\n */\n async configurationWizard(): Promise<any> {\n console.log(chalk.bold.blue('\\n🧙♂️ Configuration Wizard\\n'));\n\n const themeAnswer = await inquirer.prompt({\n type: 'list',\n name: 'theme',\n message: 'Select color theme:',\n choices: [\n { name: 'Default - Balanced colors', value: 'default' },\n { name: 'Modern - Vibrant colors', value: 'modern' },\n { name: 'Minimal - Clean and simple', value: 'minimal' },\n { name: 'Neon - High contrast', value: 'neon' },\n ],\n default: 'default',\n });\n\n const interactiveAnswer = await inquirer.prompt({\n type: 'confirm',\n name: 'interactive',\n message: 'Enable interactive mode by default?',\n default: true,\n });\n\n const backupAnswer = await inquirer.prompt({\n type: 'confirm',\n name: 'backup',\n message: 'Create backups before updates?',\n default: true,\n });\n\n const strategyAnswer = await inquirer.prompt({\n type: 'list',\n name: 'updateStrategy',\n message: 'Default update strategy:',\n choices: [\n { name: 'Latest stable versions', value: 'latest' },\n { name: 'Minor updates (non-breaking)', value: 'minor' },\n { name: 'Patch updates (bug fixes)', value: 'patch' },\n ],\n default: 'latest',\n });\n\n const timeoutAnswer = await inquirer.prompt({\n type: 'number',\n name: 'timeout',\n message: 'Network timeout (seconds):',\n default: 30,\n validate: (input: number | undefined) => {\n if (input === undefined) return 'Timeout is required';\n return input > 0 || 'Timeout must be positive';\n },\n });\n\n const answers = {\n ...themeAnswer,\n ...interactiveAnswer,\n ...backupAnswer,\n ...strategyAnswer,\n ...timeoutAnswer,\n };\n\n return answers;\n }\n\n /**\n * Impact preview before update\n */\n async previewImpact(impact: any): Promise<boolean> {\n console.log(chalk.bold.blue('\\n📊 Impact Preview\\n'));\n\n // Display impact summary\n console.log(`Packages to update: ${impact.totalUpdates}`);\n console.log(`Risk level: ${impact.riskLevel}`);\n console.log(`Affected packages: ${impact.affectedCount}`);\n\n if (impact.securityUpdates > 0) {\n console.log(StyledText.iconSecurity(`${impact.securityUpdates} security updates`));\n }\n\n console.log('');\n\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'proceed',\n message: 'Proceed with update?',\n default: true,\n },\n ]);\n\n return answers.proceed;\n }\n\n /**\n * Error recovery options\n */\n async errorRecoveryOptions(error: string): Promise<string> {\n const options = [\n { name: 'Retry operation', value: 'retry' },\n { name: 'Skip this package', value: 'skip' },\n { name: 'Continue with remaining', value: 'continue' },\n { name: 'Abort operation', value: 'abort' },\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'action',\n message: StyledText.iconError(`Error: ${error}`),\n choices: options,\n },\n ]);\n\n return answers.action;\n }\n\n /**\n * Confirm tool update\n */\n async confirmUpdate(message: string): Promise<boolean> {\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'update',\n message: StyledText.iconUpdate(message),\n default: true,\n },\n ]);\n\n return answers.update;\n }\n\n /**\n * Format package choice for display\n */\n private formatPackageChoice(pkg: any): string {\n const updateTypeColor: Record<string, any> = {\n major: chalk.red,\n minor: chalk.yellow,\n patch: chalk.green,\n };\n\n const typeColor = updateTypeColor[pkg.type] || chalk.gray;\n\n return `${pkg.name} ${chalk.dim(pkg.current)} → ${typeColor(pkg.latest)} ${chalk.dim(`(${pkg.type})`)}`;\n }\n}\n\n/**\n * Auto-completion utilities\n */\nexport class AutoCompleteManager {\n static async suggestWorkspaces(current: string): Promise<string[]> {\n const suggestions: string[] = [];\n\n // Common workspace patterns\n const patterns = [\n 'pnpm-workspace.yaml',\n 'pnpm-workspace.yml',\n '**/*/pnpm-workspace.yaml',\n '**/*/pnpm-workspace.yml',\n ];\n\n for (const pattern of patterns) {\n try {\n const { glob } = await import('glob');\n const matches = await glob(pattern);\n matches.forEach((match: string) => {\n const dir = match.replace(/\\/pnpm-workspace\\.ya?ml$/, '');\n if (!suggestions.includes(dir)) {\n suggestions.push(dir);\n }\n });\n } catch {\n // Ignore errors\n }\n }\n\n return suggestions.filter((s) => s.toLowerCase().includes(current.toLowerCase()));\n }\n\n static async suggestCatalogs(): Promise<string[]> {\n return [];\n }\n\n static async suggestPackages(): Promise<string[]> {\n return [];\n }\n}\n\n/**\n * Interactive command builder\n */\nexport class InteractiveCommandBuilder {\n static async buildCommand(): Promise<{\n command: string;\n options: Record<string, any>;\n }> {\n const baseCommand = await inquirer.prompt([\n {\n type: 'list',\n name: 'command',\n message: 'What would you like to do?',\n choices: [\n { name: 'Check for updates', value: 'check' },\n { name: 'Update dependencies', value: 'update' },\n { name: 'Analyze impact', value: 'analyze' },\n { name: 'Show workspace info', value: 'workspace' },\n ],\n },\n ]);\n\n const options: Record<string, any> = {};\n\n // Common options\n const common = await inquirer.prompt([\n {\n type: 'list',\n name: 'format',\n message: 'Output format:',\n choices: [\n { name: 'Table (rich)', value: 'table' },\n { name: 'JSON', value: 'json' },\n { name: 'YAML', value: 'yaml' },\n { name: 'Minimal', value: 'minimal' },\n ],\n default: 'table',\n },\n ]);\n\n options.format = common.format;\n\n // Command-specific options\n switch (baseCommand.command) {\n case 'update':\n const updateOpts = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'interactive',\n message: 'Interactive mode?',\n default: true,\n },\n {\n type: 'confirm',\n name: 'dryRun',\n message: 'Dry run mode?',\n default: false,\n },\n {\n type: 'confirm',\n name: 'backup',\n message: 'Create backup?',\n default: true,\n },\n ]);\n Object.assign(options, updateOpts);\n break;\n\n case 'check':\n const checkOpts = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'includePrerelease',\n message: 'Include pre-release versions?',\n default: false,\n },\n ]);\n options.prerelease = checkOpts.includePrerelease;\n break;\n }\n\n return {\n command: baseCommand.command,\n options,\n };\n }\n}\n","/**\n * Update Command\n *\n * CLI command to update catalog dependencies.\n * Supports interactive mode, dry-run, and various update strategies.\n */\n\nimport { CatalogUpdateService, UpdateOptions, UpdatePlan, UpdateTarget } from '@pcu/core';\nimport { OutputFormat, OutputFormatter } from '../formatters/outputFormatter.js';\nimport { ProgressBar } from '../formatters/progressBar.js';\nimport { InteractivePrompts } from '../interactive/interactivePrompts.js';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\nimport { ConfigLoader } from '@pcu/utils';\n\nexport interface UpdateCommandOptions {\n workspace?: string;\n catalog?: string;\n format?: OutputFormat;\n target?: UpdateTarget;\n interactive?: boolean;\n dryRun?: boolean;\n force?: boolean;\n prerelease?: boolean;\n include?: string[];\n exclude?: string[];\n createBackup?: boolean;\n verbose?: boolean;\n color?: boolean;\n}\n\nexport class UpdateCommand {\n private readonly updateService: CatalogUpdateService;\n\n constructor(updateService: CatalogUpdateService) {\n this.updateService = updateService;\n }\n\n /**\n * Execute the update command\n */\n async execute(options: UpdateCommandOptions = {}): Promise<void> {\n let progressBar: ProgressBar | undefined;\n\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n // Create progress bar for the update process\n progressBar = new ProgressBar({\n text: '正在规划更新...',\n total: 4, // 4 main steps\n });\n progressBar.start('正在加载工作区配置...');\n\n // Load configuration file first\n const config = ConfigLoader.loadConfig(options.workspace || process.cwd());\n\n // Use format from CLI options first, then config file, then default\n const effectiveFormat = options.format || config.defaults?.format || 'table';\n\n // Create output formatter with effective format\n const formatter = new OutputFormatter(\n effectiveFormat as OutputFormat,\n options.color !== false\n );\n\n // Merge CLI options with configuration file settings\n const updateOptions: UpdateOptions = {\n workspacePath: options.workspace,\n catalogName: options.catalog,\n target: options.target || config.defaults?.target,\n includePrerelease: options.prerelease ?? config.defaults?.includePrerelease ?? false,\n // CLI include/exclude options take priority over config file\n include: options.include?.length ? options.include : config.include,\n exclude: options.exclude?.length ? options.exclude : config.exclude,\n interactive: options.interactive ?? config.defaults?.interactive ?? false,\n dryRun: options.dryRun ?? config.defaults?.dryRun ?? false,\n force: options.force ?? false,\n createBackup: options.createBackup ?? config.defaults?.createBackup ?? false,\n };\n\n // Step 1: Planning updates\n progressBar.update('正在检查包版本...', 1, 4);\n const plan = await this.updateService.planUpdates(updateOptions);\n\n // Step 2: Check if any updates found\n progressBar.update('正在分析更新...', 2, 4);\n\n if (!plan.updates.length) {\n progressBar.succeed('所有依赖包都是最新的');\n console.log(StyledText.iconSuccess('All dependencies are up to date!'));\n return;\n }\n\n console.log(\n StyledText.iconPackage(\n `Found ${plan.totalUpdates} update${plan.totalUpdates === 1 ? '' : 's'} available`\n )\n );\n\n // Interactive selection if enabled\n let finalPlan = plan;\n if (options.interactive) {\n finalPlan = await this.interactiveSelection(plan);\n if (!finalPlan.updates.length) {\n progressBar.warn('未选择任何更新');\n console.log(StyledText.iconWarning('No updates selected'));\n return;\n }\n }\n\n // Step 3: Apply updates\n progressBar.update('正在准备应用更新...', 3, 4);\n\n if (!options.dryRun) {\n // Replace the progress bar with one for applying updates\n progressBar.stop();\n progressBar = new ProgressBar({\n text: 'Applying updates...',\n total: finalPlan.updates.length,\n });\n progressBar.start('正在应用更新...');\n\n const result = await this.updateService.executeUpdates(finalPlan, updateOptions);\n progressBar.succeed(`Applied ${finalPlan.updates.length} updates`);\n\n console.log(formatter.formatUpdateResult(result));\n } else {\n progressBar.update('正在生成预览...', 4, 4);\n progressBar.succeed('更新预览完成');\n console.log(StyledText.iconInfo('Dry run - no changes made'));\n console.log(JSON.stringify(finalPlan, null, 2));\n }\n\n console.log(StyledText.iconComplete('Update process completed!'));\n } catch (error) {\n if (progressBar) {\n progressBar.fail('Operation failed');\n }\n\n if (error instanceof Error) {\n console.error(StyledText.iconError(`Error: ${error.message}`));\n } else {\n console.error(StyledText.iconError('Unknown error occurred'));\n }\n throw error;\n }\n }\n\n /**\n * Interactive update selection\n */\n private async interactiveSelection(plan: UpdatePlan): Promise<UpdatePlan> {\n const interactivePrompts = new InteractivePrompts();\n\n // Transform PlannedUpdate to the format expected by InteractivePrompts\n const packages = plan.updates.map((update) => ({\n name: update.packageName,\n current: update.currentVersion,\n latest: update.newVersion,\n type: update.updateType,\n }));\n\n const selectedPackageNames = await interactivePrompts.selectPackages(packages);\n\n // Filter the plan to only include selected packages\n const selectedUpdates = plan.updates.filter((update) =>\n selectedPackageNames.includes(update.packageName)\n );\n\n return {\n ...plan,\n updates: selectedUpdates,\n totalUpdates: selectedUpdates.length,\n };\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: UpdateCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal');\n }\n\n // Validate target\n if (\n options.target &&\n !['latest', 'greatest', 'minor', 'patch', 'newest'].includes(options.target)\n ) {\n errors.push('Invalid target. Must be one of: latest, greatest, minor, patch, newest');\n }\n\n // Interactive and dry-run conflict\n if (options.interactive && options.dryRun) {\n errors.push('Cannot use --interactive with --dry-run');\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nUpdate catalog dependencies\n\nUsage:\n pcu update [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --catalog <name> Update specific catalog only\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --target <type> Update target: latest, greatest, minor, patch, newest (default: latest)\n -i, --interactive Interactive mode to choose updates\n -d, --dry-run Preview changes without writing files\n --force Force updates even if conflicts exist\n --prerelease Include prerelease versions\n --include <pattern> Include packages matching pattern (can be used multiple times)\n --exclude <pattern> Exclude packages matching pattern (can be used multiple times)\n --create-backup Create backup files before updating\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu update # Update all catalogs\n pcu update --interactive # Interactive update selection\n pcu update --dry-run # Preview updates without applying\n pcu update --catalog react17 # Update specific catalog\n pcu update --target minor # Update to latest minor versions only\n pcu update --force # Force updates despite conflicts\n pcu update --include \"react*\" # Update only React packages\n\nExit Codes:\n 0 Updates completed successfully\n 1 Updates failed or were cancelled\n 2 Error occurred\n `;\n }\n}\n","/**\n * Security Command\n *\n * CLI command to perform security vulnerability scanning and automated fixes.\n * Integrates with npm audit and snyk for comprehensive security analysis.\n */\n\nimport { spawnSync } from 'child_process';\nimport * as fs from 'fs-extra';\nimport * as path from 'path';\nimport { OutputFormatter, OutputFormat } from '../formatters/outputFormatter.js';\nimport { ProgressBar } from '../formatters/progressBar.js';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\n\nexport interface SecurityCommandOptions {\n workspace?: string;\n format?: OutputFormat;\n audit?: boolean;\n fixVulns?: boolean;\n severity?: 'low' | 'moderate' | 'high' | 'critical';\n includeDev?: boolean;\n snyk?: boolean;\n verbose?: boolean;\n color?: boolean;\n}\n\nexport interface SecurityReport {\n summary: {\n totalVulnerabilities: number;\n critical: number;\n high: number;\n moderate: number;\n low: number;\n info: number;\n };\n vulnerabilities: Vulnerability[];\n recommendations: SecurityRecommendation[];\n metadata: {\n scanDate: string;\n scanTools: string[];\n workspacePath: string;\n };\n}\n\nexport interface Vulnerability {\n id: string;\n package: string;\n severity: 'low' | 'moderate' | 'high' | 'critical';\n title: string;\n url: string;\n range: string;\n fixAvailable: boolean | string;\n fixVersion?: string;\n paths: string[];\n cwe?: string[];\n cve?: string[];\n}\n\nexport interface SecurityRecommendation {\n package: string;\n currentVersion: string;\n recommendedVersion: string;\n type: 'update' | 'remove' | 'replace';\n reason: string;\n impact: string;\n}\n\nexport class SecurityCommand {\n constructor(private readonly outputFormatter: OutputFormatter) {}\n\n /**\n * Execute the security command\n */\n async execute(options: SecurityCommandOptions = {}): Promise<void> {\n let progressBar: ProgressBar | undefined;\n\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n // Show loading with progress bar\n progressBar = new ProgressBar({\n text: 'Performing security analysis...',\n });\n progressBar.start();\n\n if (options.verbose) {\n console.log(StyledText.iconAnalysis('Security vulnerability scanning'));\n console.log(StyledText.muted(`Workspace: ${options.workspace || process.cwd()}`));\n console.log(StyledText.muted(`Severity filter: ${options.severity || 'all'}`));\n console.log('');\n }\n\n // Execute security scan\n const report = await this.performSecurityScan(options);\n\n progressBar.succeed('Security analysis completed');\n\n // Format and display results\n const formattedOutput = this.outputFormatter.formatSecurityReport(report);\n console.log(formattedOutput);\n\n // Show recommendations if available\n if (report.recommendations.length > 0) {\n this.showRecommendations(report);\n }\n\n // Auto-fix vulnerabilities if requested\n if (options.fixVulns) {\n await this.autoFixVulnerabilities(report, options);\n }\n\n // Exit with appropriate code based on findings\n const exitCode = report.summary.critical > 0 ? 1 : 0;\n process.exit(exitCode);\n } catch (error) {\n if (progressBar) {\n progressBar.fail('Security analysis failed');\n }\n\n console.error(StyledText.iconError('Error performing security scan:'));\n console.error(StyledText.error(String(error)));\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'));\n console.error(StyledText.muted(error.stack || 'No stack trace available'));\n }\n\n process.exit(1);\n }\n }\n\n /**\n * Perform comprehensive security scan\n */\n private async performSecurityScan(options: SecurityCommandOptions): Promise<SecurityReport> {\n const workspacePath = options.workspace || process.cwd();\n const vulnerabilities: Vulnerability[] = [];\n const recommendations: SecurityRecommendation[] = [];\n\n // Check if package.json exists\n const packageJsonPath = path.join(workspacePath, 'package.json');\n if (!(await fs.pathExists(packageJsonPath))) {\n throw new Error(`No package.json found in ${workspacePath}`);\n }\n\n // Run npm audit\n if (options.audit !== false) {\n const npmVulns = await this.runNpmAudit(workspacePath, options);\n vulnerabilities.push(...npmVulns);\n }\n\n // Run snyk scan if available\n if (options.snyk) {\n const snykVulns = await this.runSnykScan(workspacePath, options);\n vulnerabilities.push(...snykVulns);\n }\n\n // Generate recommendations\n recommendations.push(...this.generateRecommendations(vulnerabilities));\n\n // Filter by severity if specified\n const filteredVulnerabilities = options.severity\n ? vulnerabilities.filter(\n (v) => this.severityToNumber(v.severity) >= this.severityToNumber(options.severity!)\n )\n : vulnerabilities;\n\n return {\n summary: this.generateSummary(filteredVulnerabilities),\n vulnerabilities: filteredVulnerabilities,\n recommendations: recommendations,\n metadata: {\n scanDate: new Date().toISOString(),\n scanTools: ['npm-audit', ...(options.snyk ? ['snyk'] : [])],\n workspacePath: workspacePath,\n },\n };\n }\n\n /**\n * Run npm audit scan\n */\n private async runNpmAudit(\n workspacePath: string,\n options: SecurityCommandOptions\n ): Promise<Vulnerability[]> {\n const auditArgs = ['audit', '--json'];\n\n if (!options.includeDev) {\n auditArgs.push('--omit=dev');\n }\n\n const result = spawnSync('npm', auditArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n if (result.error) {\n throw new Error(`npm audit failed: ${result.error.message}`);\n }\n\n if (result.status === 1) {\n // npm audit returns 1 when vulnerabilities are found\n try {\n const auditData = JSON.parse(result.stdout);\n return this.parseNpmAuditResults(auditData);\n } catch (parseError) {\n throw new Error(`Failed to parse npm audit output: ${parseError}`);\n }\n } else if (result.status === 0) {\n try {\n const auditData = JSON.parse(result.stdout);\n return this.parseNpmAuditResults(auditData);\n } catch (parseError) {\n throw new Error(`Failed to parse npm audit output: ${parseError}`);\n }\n } else {\n throw new Error(`npm audit failed with status ${result.status}: ${result.stderr}`);\n }\n }\n\n /**\n * Run snyk scan\n */\n private async runSnykScan(\n workspacePath: string,\n options: SecurityCommandOptions\n ): Promise<Vulnerability[]> {\n try {\n // Check if snyk is installed\n const versionResult = spawnSync('snyk', ['--version'], { stdio: 'pipe' });\n if (versionResult.error) {\n throw versionResult.error;\n }\n\n const snykArgs = ['test', '--json'];\n\n if (!options.includeDev) {\n snykArgs.push('--dev');\n }\n\n const result = spawnSync('snyk', snykArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n if (result.error) {\n throw result.error;\n }\n\n if (result.status !== 0 && result.status !== 1) {\n throw new Error(`Snyk scan failed with status ${result.status}: ${result.stderr}`);\n }\n\n const snykData = JSON.parse(result.stdout);\n return this.parseSnykResults(snykData);\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n console.warn(StyledText.iconWarning('Snyk not found. Install with: npm install -g snyk'));\n return [];\n }\n throw new Error(`Snyk scan failed: ${error.message}`);\n }\n }\n\n /**\n * Parse npm audit results\n */\n private parseNpmAuditResults(auditData: any): Vulnerability[] {\n const vulnerabilities: Vulnerability[] = [];\n\n if (!auditData.vulnerabilities) {\n return vulnerabilities;\n }\n\n for (const [id, vuln] of Object.entries(auditData.vulnerabilities)) {\n const vulnerability = vuln as any;\n\n vulnerabilities.push({\n id: id,\n package: vulnerability.name,\n severity: vulnerability.severity,\n title: vulnerability.title || vulnerability.name,\n url: vulnerability.url || `https://npmjs.com/advisories/${id}`,\n range: vulnerability.range,\n fixAvailable: vulnerability.fixAvailable,\n fixVersion: vulnerability.fixAvailable === true ? vulnerability.fixAvailable : undefined,\n paths: vulnerability.via?.map((v: any) => v.source || v.name) || [vulnerability.name],\n cwe: vulnerability.cwe,\n cve: vulnerability.cve,\n });\n }\n\n return vulnerabilities;\n }\n\n /**\n * Parse snyk results\n */\n private parseSnykResults(snykData: any): Vulnerability[] {\n const vulnerabilities: Vulnerability[] = [];\n\n if (!snykData.vulnerabilities) {\n return vulnerabilities;\n }\n\n for (const vuln of snykData.vulnerabilities) {\n vulnerabilities.push({\n id: vuln.id,\n package: vuln.packageName,\n severity: vuln.severity,\n title: vuln.title,\n url: vuln.url,\n range: vuln.semver?.vulnerable?.join(' || ') || vuln.version,\n fixAvailable: vuln.fixedIn?.length > 0,\n fixVersion: vuln.fixedIn?.[0],\n paths: vuln.from || [vuln.packageName],\n cwe: vuln.identifiers?.CWE || [],\n cve: vuln.identifiers?.CVE || [],\n });\n }\n\n return vulnerabilities;\n }\n\n /**\n * Generate security recommendations\n */\n private generateRecommendations(vulnerabilities: Vulnerability[]): SecurityRecommendation[] {\n const recommendations: SecurityRecommendation[] = [];\n const packages = new Set(vulnerabilities.map((v) => v.package));\n\n for (const pkg of packages) {\n const pkgVulns = vulnerabilities.filter((v) => v.package === pkg);\n const criticalVulns = pkgVulns.filter(\n (v) => v.severity === 'critical' || v.severity === 'high'\n );\n\n if (criticalVulns.length > 0) {\n const fixVersions = [\n ...new Set(\n criticalVulns.map((v) => v.fixVersion).filter((v) => v && typeof v === 'string')\n ),\n ];\n\n if (fixVersions.length > 0) {\n const currentVersion = pkgVulns[0]?.range?.split(' ')[0] || 'unknown';\n const recommendedVersion = fixVersions[0] || 'unknown';\n\n recommendations.push({\n package: pkg,\n currentVersion: currentVersion,\n recommendedVersion: recommendedVersion,\n type: 'update',\n reason: `${criticalVulns.length} critical vulnerabilities found`,\n impact: 'High - Security vulnerability fix',\n });\n }\n }\n }\n\n return recommendations;\n }\n\n /**\n * Generate summary from vulnerabilities\n */\n private generateSummary(vulnerabilities: Vulnerability[]): SecurityReport['summary'] {\n const summary = {\n totalVulnerabilities: vulnerabilities.length,\n critical: 0,\n high: 0,\n moderate: 0,\n low: 0,\n info: 0,\n };\n\n for (const vuln of vulnerabilities) {\n const severity = vuln.severity as string;\n switch (severity) {\n case 'critical':\n summary.critical++;\n break;\n case 'high':\n summary.high++;\n break;\n case 'moderate':\n summary.moderate++;\n break;\n case 'low':\n summary.low++;\n break;\n case 'info':\n summary.info++;\n break;\n default:\n summary.info++;\n break;\n }\n }\n\n return summary;\n }\n\n /**\n * Convert severity string to number for filtering\n */\n private severityToNumber(severity: string): number {\n switch (severity) {\n case 'critical':\n return 4;\n case 'high':\n return 3;\n case 'moderate':\n return 2;\n case 'low':\n return 1;\n case 'info':\n return 0;\n default:\n return 0;\n }\n }\n\n /**\n * Show security recommendations\n */\n private showRecommendations(report: SecurityReport): void {\n if (report.recommendations.length === 0) {\n return;\n }\n\n console.log('\\n' + StyledText.iconInfo('Security Recommendations:'));\n\n for (const rec of report.recommendations) {\n console.log(\n ` ${StyledText.iconWarning()} ${rec.package}: ${rec.currentVersion} → ${rec.recommendedVersion}`\n );\n console.log(` ${StyledText.muted(rec.reason)}`);\n console.log(` ${StyledText.muted(rec.impact)}`);\n }\n\n console.log('');\n console.log(StyledText.iconUpdate('Run with --fix-vulns to apply automatic fixes'));\n }\n\n /**\n * Auto-fix vulnerabilities\n */\n private async autoFixVulnerabilities(\n report: SecurityReport,\n options: SecurityCommandOptions\n ): Promise<void> {\n if (report.recommendations.length === 0) {\n console.log(StyledText.iconSuccess('No security fixes available'));\n return;\n }\n\n console.log('\\n' + StyledText.iconUpdate('Applying security fixes...'));\n\n const workspacePath = options.workspace || process.cwd();\n const fixableVulns = report.recommendations.filter((r) => r.type === 'update');\n\n if (fixableVulns.length === 0) {\n console.log(StyledText.iconInfo('No automatic fixes available'));\n return;\n }\n\n try {\n // Run npm audit fix\n const fixArgs = ['audit', 'fix'];\n if (!options.includeDev) {\n fixArgs.push('--omit=dev');\n }\n\n const result = spawnSync('npm', fixArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: 'inherit',\n });\n\n if (result.error) {\n throw result.error;\n }\n\n if (result.status !== 0) {\n throw new Error(`npm audit fix failed with status ${result.status}`);\n }\n\n console.log(StyledText.iconSuccess('Security fixes applied successfully'));\n\n // Re-run scan to verify fixes\n console.log(StyledText.iconInfo('Re-running security scan to verify fixes...'));\n const newReport = await this.performSecurityScan({ ...options, fixVulns: false });\n\n if (newReport.summary.critical === 0 && newReport.summary.high === 0) {\n console.log(\n StyledText.iconSuccess('All critical and high severity vulnerabilities have been fixed!')\n );\n } else {\n console.log(\n StyledText.iconWarning(\n `${newReport.summary.critical} critical and ${newReport.summary.high} high severity vulnerabilities remain`\n )\n );\n }\n } catch (error: any) {\n console.error(StyledText.iconError('Failed to apply security fixes:'));\n console.error(StyledText.error(error.message));\n }\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: SecurityCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal');\n }\n\n // Validate severity\n if (options.severity && !['low', 'moderate', 'high', 'critical'].includes(options.severity)) {\n errors.push('Invalid severity. Must be one of: low, moderate, high, critical');\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nSecurity vulnerability scanning and automated fixes\n\nUsage:\n pcu security [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --audit Perform npm audit scan (default: true)\n --fix-vulns Automatically fix vulnerabilities\n --severity <level> Filter by severity: low, moderate, high, critical\n --include-dev Include dev dependencies in scan\n --snyk Include Snyk scan (requires snyk CLI)\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu security # Basic security scan\n pcu security --fix-vulns # Scan and fix vulnerabilities\n pcu security --severity high # Show only high severity issues\n pcu security --snyk # Include Snyk scan\n pcu security --format json # Output as JSON\n\nExit Codes:\n 0 No vulnerabilities found\n 1 Vulnerabilities found\n 2 Error occurred\n `;\n }\n}\n","/**\n * Init Command\n *\n * CLI command to initialize PCU configuration in a workspace.\n * Creates a basic .pcurc.json configuration file with sensible defaults.\n */\n\nimport { existsSync, writeFileSync, mkdirSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\nimport { PackageFilterConfig } from '@pcu/utils';\n\nexport interface InitCommandOptions {\n workspace?: string;\n force?: boolean;\n verbose?: boolean;\n color?: boolean;\n createWorkspace?: boolean;\n full?: boolean;\n}\n\nexport class InitCommand {\n /**\n * Execute the init command\n */\n async execute(options: InitCommandOptions = {}): Promise<void> {\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n const workspacePath = options.workspace || process.cwd();\n const configPath = join(workspacePath, '.pcurc.json');\n const packageJsonPath = join(workspacePath, 'package.json');\n const workspaceYamlPath = join(workspacePath, 'pnpm-workspace.yaml');\n\n if (options.verbose) {\n console.log(StyledText.iconInfo('Initializing PCU configuration'));\n console.log(StyledText.muted(`Workspace: ${workspacePath}`));\n console.log(StyledText.muted(`Config file: ${configPath}`));\n console.log('');\n }\n\n // Check if this is a pnpm workspace\n const hasPackageJson = existsSync(packageJsonPath);\n const hasWorkspaceYaml = existsSync(workspaceYamlPath);\n const isWorkspace = hasPackageJson && hasWorkspaceYaml;\n\n if (!isWorkspace && options.createWorkspace !== false) {\n if (options.verbose) {\n console.log(StyledText.iconWarning('PNPM workspace structure not detected'));\n if (!hasPackageJson) {\n console.log(StyledText.muted('Missing: package.json'));\n }\n if (!hasWorkspaceYaml) {\n console.log(StyledText.muted('Missing: pnpm-workspace.yaml'));\n }\n console.log('');\n }\n\n // Create workspace structure\n if (options.verbose) {\n console.log(StyledText.iconInfo('Creating PNPM workspace structure...'));\n }\n\n await this.createWorkspaceStructure(\n workspacePath,\n hasPackageJson,\n hasWorkspaceYaml,\n options\n );\n\n if (options.verbose) {\n console.log(StyledText.iconSuccess('PNPM workspace structure created'));\n console.log('');\n }\n }\n\n // Check if config file already exists\n if (existsSync(configPath) && !options.force) {\n console.log(StyledText.iconWarning('Configuration file already exists!'));\n console.log(StyledText.muted(`Found: ${configPath}`));\n console.log(StyledText.muted('Use --force to overwrite existing configuration'));\n process.exit(1);\n }\n\n // Create directory if it doesn't exist\n const configDir = dirname(configPath);\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true });\n }\n\n // Generate basic configuration\n const basicConfig = this.generateBasicConfig(options.full);\n\n // Write configuration file\n writeFileSync(configPath, JSON.stringify(basicConfig, null, 2), 'utf-8');\n\n // Success message\n console.log(StyledText.iconSuccess('PCU configuration initialized successfully!'));\n console.log(StyledText.muted(`Created: ${configPath}`));\n console.log('');\n\n // Show next steps\n this.showNextSteps(configPath);\n\n process.exit(0);\n } catch (error) {\n console.error(StyledText.iconError('Error initializing configuration:'));\n console.error(StyledText.error(String(error)));\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'));\n console.error(StyledText.muted(error.stack || 'No stack trace available'));\n }\n\n process.exit(1);\n }\n }\n\n /**\n * Create PNPM workspace structure\n */\n private async createWorkspaceStructure(\n workspacePath: string,\n hasPackageJson: boolean,\n hasWorkspaceYaml: boolean,\n options: InitCommandOptions\n ): Promise<void> {\n // Create package.json if it doesn't exist\n if (!hasPackageJson) {\n const packageJsonPath = join(workspacePath, 'package.json');\n const packageJson = this.generateWorkspacePackageJson();\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8');\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: package.json'));\n }\n }\n\n // Create pnpm-workspace.yaml if it doesn't exist\n if (!hasWorkspaceYaml) {\n const workspaceYamlPath = join(workspacePath, 'pnpm-workspace.yaml');\n const workspaceYaml = this.generateWorkspaceYaml();\n writeFileSync(workspaceYamlPath, workspaceYaml, 'utf-8');\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: pnpm-workspace.yaml'));\n }\n }\n\n // Create basic directories structure\n const packagesDir = join(workspacePath, 'packages');\n if (!existsSync(packagesDir)) {\n mkdirSync(packagesDir, { recursive: true });\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: packages/ directory'));\n }\n }\n }\n\n /**\n * Generate workspace package.json\n */\n private generateWorkspacePackageJson(): any {\n return {\n name: 'my-workspace',\n version: '1.0.0',\n private: true,\n description: 'PNPM workspace with catalog dependency management',\n scripts: {\n 'check-updates': 'pcu check',\n 'update-deps': 'pcu update --interactive',\n 'security-audit': 'pcu security',\n },\n devDependencies: {\n 'pnpm-catalog-updates': 'latest',\n },\n };\n }\n\n /**\n * Generate pnpm-workspace.yaml\n */\n private generateWorkspaceYaml(): string {\n return `# PNPM Workspace Configuration\n# Learn more: https://pnpm.io/pnpm-workspace_yaml\n\npackages:\n # Include all packages in packages directory\n - 'packages/*'\n \n # Include apps directory if you have applications\n # - 'apps/*'\n \n # Include tools directory if you have development tools\n # - 'tools/*'\n\n# Catalog Configuration\n# Centrally manage dependency versions across workspace packages\n# Learn more: https://pnpm.io/catalogs\ncatalogs:\n # Default catalog for common dependencies\n default:\n # React ecosystem\n # react: ^18.2.0\n # react-dom: ^18.2.0\n # '@types/react': ^18.2.0\n # '@types/react-dom': ^18.2.0\n \n # TypeScript and Node.js\n # typescript: ^5.0.0\n # '@types/node': ^20.0.0\n \n # Development tools\n # eslint: ^8.0.0\n # prettier: ^3.0.0\n # vitest: ^1.0.0\n`;\n }\n\n /**\n * Generate basic configuration with sensible defaults\n */\n private generateBasicConfig(full?: boolean): PackageFilterConfig {\n if (full) {\n return this.generateFullConfig();\n }\n\n // Minimal configuration\n return {\n defaults: {\n target: 'latest',\n createBackup: true,\n format: 'table',\n },\n exclude: [],\n include: [],\n };\n }\n\n /**\n * Generate full configuration with all options\n */\n private generateFullConfig(): PackageFilterConfig {\n return {\n defaults: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n dryRun: false,\n createBackup: true,\n format: 'table',\n },\n packageRules: [\n {\n patterns: ['react', 'react-dom'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: true,\n relatedPackages: ['@types/react', '@types/react-dom'],\n },\n {\n patterns: ['@types/*'],\n target: 'latest',\n autoUpdate: true,\n requireConfirmation: false,\n groupUpdate: false,\n },\n {\n patterns: ['eslint*', 'prettier', '@typescript-eslint/*'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: false,\n groupUpdate: true,\n },\n ],\n security: {\n autoFixVulnerabilities: true,\n allowMajorForSecurity: true,\n notifyOnSecurityUpdate: false,\n },\n advanced: {\n concurrency: 5,\n timeout: 30000,\n retries: 3,\n cacheValidityMinutes: 60,\n checkForUpdates: true,\n },\n monorepo: {\n syncVersions: [],\n catalogPriority: ['default'],\n },\n exclude: [],\n include: [],\n };\n }\n\n /**\n * Show next steps to the user\n */\n private showNextSteps(configPath: string): void {\n const lines: string[] = [];\n\n lines.push(StyledText.iconInfo('Next steps:'));\n lines.push('');\n lines.push(StyledText.muted('1. Review and customize the configuration:'));\n lines.push(StyledText.muted(` ${configPath}`));\n lines.push('');\n lines.push(StyledText.muted('2. Add packages to your workspace:'));\n lines.push(StyledText.muted(' mkdir packages/my-app && cd packages/my-app'));\n lines.push(StyledText.muted(' pnpm init'));\n lines.push('');\n lines.push(StyledText.muted('3. Install dependencies and check for updates:'));\n lines.push(StyledText.muted(' pnpm install'));\n lines.push(StyledText.muted(' pcu check'));\n lines.push('');\n lines.push(StyledText.muted('4. Update dependencies interactively:'));\n lines.push(StyledText.muted(' pcu update --interactive'));\n lines.push('');\n lines.push(StyledText.muted('5. Learn more about PNPM workspace and PCU:'));\n lines.push(StyledText.muted(' https://pnpm.io/workspaces'));\n lines.push(\n StyledText.muted(' https://github.com/your-repo/pnpm-catalog-updates#configuration')\n );\n\n console.log(lines.join('\\n'));\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: InitCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate workspace path exists if provided\n if (options.workspace && !existsSync(options.workspace)) {\n errors.push(`Workspace directory does not exist: ${options.workspace}`);\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nInitialize PCU configuration and PNPM workspace\n\nUsage:\n pcu init [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --force Overwrite existing configuration file\n --full Generate full configuration with all options\n --create-workspace Create PNPM workspace structure if missing (default: true)\n --no-create-workspace Skip creating PNPM workspace structure\n --verbose Show detailed information\n --no-color Disable colored output\n\nDescription:\n Creates a complete PNPM workspace environment with:\n - Basic .pcurc.json configuration file with sensible defaults\n - package.json for workspace root (if missing)\n - pnpm-workspace.yaml configuration (if missing)\n - packages/ directory structure (if missing)\n \n By default, creates a minimal configuration. Use --full to generate\n a complete configuration with package rules for React, TypeScript,\n ESLint, and other common dependencies with security settings.\n\nExamples:\n pcu init # Initialize with minimal configuration\n pcu init --full # Initialize with full configuration\n pcu init --workspace ./my-project # Initialize in specific directory\n pcu init --force # Overwrite existing configuration\n pcu init --no-create-workspace # Only create .pcurc.json configuration\n\nFiles Created:\n .pcurc.json PCU configuration (minimal by default, full with --full)\n package.json Workspace root package.json (if missing)\n pnpm-workspace.yaml PNPM workspace configuration (if missing)\n packages/ Directory for workspace packages (if missing)\n\nExit Codes:\n 0 Configuration initialized successfully\n 1 Configuration already exists (use --force to overwrite)\n 2 Error occurred\n `;\n }\n}\n","#!/usr/bin/env node\n\n/**\n * pnpm-catalog-updates CLI Entry Point\n *\n * A CLI tool for checking and updating pnpm workspace catalog dependencies.\n * This is the main entry point that handles command parsing and execution.\n */\n\nimport { dirname, join } from 'path';\nimport { OutputFormat, OutputFormatter } from './formatters/outputFormatter.js';\n\n// Services and Dependencies\nimport {\n CatalogUpdateService,\n WorkspaceService,\n NpmRegistryService,\n FileSystemService,\n FileWorkspaceRepository,\n} from '@pcu/core';\n// CLI Commands\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { CheckCommand } from './commands/checkCommand.js';\nimport { UpdateCommand } from './commands/updateCommand.js';\nimport { SecurityCommand } from './commands/securityCommand.js';\nimport { InitCommand } from './commands/initCommand.js';\nimport { InteractivePrompts } from './interactive/interactivePrompts.js';\nimport { ThemeManager, StyledText } from './themes/colorTheme.js';\nimport { VersionChecker, ConfigLoader } from '@pcu/utils';\n\n// Get package.json for version info\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));\n\n/**\n * Create service dependencies with configuration support\n */\nfunction createServices(workspacePath?: string) {\n const fileSystemService = new FileSystemService();\n const workspaceRepository = new FileWorkspaceRepository(fileSystemService);\n // Use factory method to create CatalogUpdateService with configuration\n const catalogUpdateService = CatalogUpdateService.createWithConfig(\n workspaceRepository,\n workspacePath\n );\n const workspaceService = new WorkspaceService(workspaceRepository);\n\n return {\n fileSystemService,\n workspaceRepository,\n catalogUpdateService,\n workspaceService,\n };\n}\n\n/**\n * Main CLI function\n */\nexport async function main(): Promise<void> {\n const program = new Command();\n\n // Parse arguments first to get workspace path\n let workspacePath: string | undefined;\n\n // Extract workspace path from arguments for service creation\n const workspaceIndex = process.argv.findIndex((arg) => arg === '-w' || arg === '--workspace');\n if (workspaceIndex !== -1 && workspaceIndex + 1 < process.argv.length) {\n workspacePath = process.argv[workspaceIndex + 1];\n }\n\n // Load configuration to check if version updates are enabled\n const config = ConfigLoader.loadConfig(workspacePath || process.cwd());\n\n // Check for version updates (skip in CI environments or if disabled)\n if (VersionChecker.shouldCheckForUpdates() && config.advanced?.checkForUpdates !== false) {\n try {\n const versionResult = await VersionChecker.checkVersion(packageJson.version, {\n skipPrompt: false,\n timeout: 3000, // Short timeout to not delay CLI startup\n });\n\n if (versionResult.shouldPrompt) {\n const didUpdate = await VersionChecker.promptAndUpdate(versionResult);\n if (didUpdate) {\n // Exit after successful update to allow user to restart with new version\n console.log(chalk.blue('Please run your command again to use the updated version.'));\n process.exit(0);\n }\n }\n } catch (error) {\n // Silently fail version check to not interrupt CLI usage (only show warning in verbose mode)\n if (process.argv.includes('-v') || process.argv.includes('--verbose')) {\n console.warn(chalk.yellow('⚠️ Could not check for updates:'), error);\n }\n }\n }\n\n // Create services with workspace path for configuration loading\n const services = createServices(workspacePath);\n\n // Configure the main command\n program\n .name('pcu')\n .description('A CLI tool to check and update pnpm workspace catalog dependencies')\n .option('--version', 'show version information')\n .option('-v, --verbose', 'enable verbose logging')\n .option('-w, --workspace <path>', 'workspace directory path')\n .option('--no-color', 'disable colored output')\n .option('-u, --update', 'shorthand for update command')\n .option('-c, --check', 'shorthand for check command')\n .option('-a, --analyze', 'shorthand for analyze command')\n .option('-s, --workspace-info', 'shorthand for workspace command')\n .option('-t, --theme', 'shorthand for theme command')\n .option('--security-audit', 'shorthand for security command')\n .option('--security-fix', 'shorthand for security --fix-vulns command');\n\n // Check command\n program\n .command('check')\n .alias('chk')\n .description('check for outdated catalog dependencies')\n .option('--catalog <name>', 'check specific catalog only')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .option(\n '-t, --target <type>',\n 'update target: latest, greatest, minor, patch, newest',\n 'latest'\n )\n .option('--prerelease', 'include prerelease versions')\n .option('--include <pattern>', 'include packages matching pattern', [])\n .option('--exclude <pattern>', 'exclude packages matching pattern', [])\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const checkCommand = new CheckCommand(services.catalogUpdateService);\n\n await checkCommand.execute({\n workspace: globalOptions.workspace,\n catalog: options.catalog,\n format: options.format,\n target: options.target,\n prerelease: options.prerelease,\n include: Array.isArray(options.include)\n ? options.include\n : [options.include].filter(Boolean),\n exclude: Array.isArray(options.exclude)\n ? options.exclude\n : [options.exclude].filter(Boolean),\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Update command\n program\n .command('update')\n .alias('u')\n .description('update catalog dependencies')\n .option('-i, --interactive', 'interactive mode to choose updates')\n .option('-d, --dry-run', 'preview changes without writing files')\n .option(\n '-t, --target <type>',\n 'update target: latest, greatest, minor, patch, newest',\n 'latest'\n )\n .option('--catalog <name>', 'update specific catalog only')\n .option('--include <pattern>', 'include packages matching pattern', [])\n .option('--exclude <pattern>', 'exclude packages matching pattern', [])\n .option('--force', 'force updates even if risky')\n .option('--prerelease', 'include prerelease versions')\n .option('-b, --create-backup', 'create backup files before updating')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const updateCommand = new UpdateCommand(services.catalogUpdateService);\n\n await updateCommand.execute({\n workspace: globalOptions.workspace,\n catalog: options.catalog,\n format: options.format,\n target: options.target,\n interactive: options.interactive,\n dryRun: options.dryRun,\n force: options.force,\n prerelease: options.prerelease,\n include: Array.isArray(options.include)\n ? options.include\n : [options.include].filter(Boolean),\n exclude: Array.isArray(options.exclude)\n ? options.exclude\n : [options.exclude].filter(Boolean),\n createBackup: options.createBackup,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Analyze command\n program\n .command('analyze')\n .alias('a')\n .description('analyze the impact of updating a specific dependency')\n .argument('<catalog>', 'catalog name')\n .argument('<package>', 'package name')\n .argument('[version]', 'new version (default: latest)')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (catalog, packageName, version, options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n );\n\n // Get latest version if not specified\n let targetVersion = version;\n if (!targetVersion) {\n // Create a temporary registry service for version fetching\n const tempRegistryService = new NpmRegistryService();\n targetVersion = (await tempRegistryService.getLatestVersion(packageName)).toString();\n }\n\n const analysis = await services.catalogUpdateService.analyzeImpact(\n catalog,\n packageName,\n targetVersion,\n globalOptions.workspace\n );\n\n const formattedOutput = formatter.formatImpactAnalysis(analysis);\n console.log(formattedOutput);\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Workspace command\n program\n .command('workspace')\n .alias('w')\n .description('workspace information and validation')\n .option('--validate', 'validate workspace configuration')\n .option('-s, --stats', 'show workspace statistics')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n );\n\n if (options.validate) {\n const report = await services.workspaceService.validateWorkspace(globalOptions.workspace);\n const formattedOutput = formatter.formatValidationReport(report);\n console.log(formattedOutput);\n process.exit(report.isValid ? 0 : 1);\n } else if (options.stats) {\n const stats = await services.workspaceService.getWorkspaceStats(globalOptions.workspace);\n const formattedOutput = formatter.formatWorkspaceStats(stats);\n console.log(formattedOutput);\n } else {\n const info = await services.workspaceService.getWorkspaceInfo(globalOptions.workspace);\n console.log(formatter.formatMessage(`Workspace: ${info.name}`, 'info'));\n console.log(formatter.formatMessage(`Path: ${info.path}`, 'info'));\n console.log(formatter.formatMessage(`Packages: ${info.packageCount}`, 'info'));\n console.log(formatter.formatMessage(`Catalogs: ${info.catalogCount}`, 'info'));\n\n if (info.catalogNames.length > 0) {\n console.log(\n formatter.formatMessage(`Catalog names: ${info.catalogNames.join(', ')}`, 'info')\n );\n }\n }\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Theme command\n program\n .command('theme')\n .alias('t')\n .description('configure color theme')\n .option('-s, --set <theme>', 'set theme: default, modern, minimal, neon')\n .option('-l, --list', 'list available themes')\n .option('-i, --interactive', 'interactive theme selection')\n .action(async (options, _command) => {\n try {\n if (options.list) {\n const themes = ThemeManager.listThemes();\n console.log(StyledText.iconInfo('Available themes:'));\n themes.forEach((theme) => {\n console.log(` • ${theme}`);\n });\n return;\n }\n\n if (options.set) {\n const themes = ThemeManager.listThemes();\n if (!themes.includes(options.set)) {\n console.error(StyledText.iconError(`Invalid theme: ${options.set}`));\n console.log(StyledText.muted(`Available themes: ${themes.join(', ')}`));\n process.exit(1);\n }\n\n ThemeManager.setTheme(options.set);\n console.log(StyledText.iconSuccess(`Theme set to: ${options.set}`));\n\n // Show a preview\n console.log('\\nTheme preview:');\n const theme = ThemeManager.getTheme();\n console.log(` ${theme.success('✓ Success message')}`);\n console.log(` ${theme.warning('⚠ Warning message')}`);\n console.log(` ${theme.error('✗ Error message')}`);\n console.log(` ${theme.info('ℹ Info message')}`);\n console.log(\n ` ${theme.major('Major update')} | ${theme.minor('Minor update')} | ${theme.patch('Patch update')}`\n );\n return;\n }\n\n if (options.interactive) {\n const interactivePrompts = new InteractivePrompts();\n const config = await interactivePrompts.configurationWizard();\n\n if (config.theme) {\n ThemeManager.setTheme(config.theme);\n console.log(StyledText.iconSuccess(`Theme configured: ${config.theme}`));\n }\n return;\n }\n\n // Default: show current theme and list\n const currentTheme = ThemeManager.getTheme();\n console.log(StyledText.iconInfo('Current theme settings:'));\n console.log(` Theme: ${currentTheme ? 'custom' : 'default'}`);\n console.log('\\nAvailable themes:');\n ThemeManager.listThemes().forEach((theme) => {\n console.log(` • ${theme}`);\n });\n console.log(\n StyledText.muted('\\nUse --set <theme> to change theme or --interactive for guided setup')\n );\n } catch (error) {\n console.error(StyledText.iconError('Error configuring theme:'), error);\n process.exit(1);\n }\n });\n\n // Security command\n program\n .command('security')\n .alias('sec')\n .description('security vulnerability scanning and automated fixes')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .option('--audit', 'perform npm audit scan (default: true)', true)\n .option('--fix-vulns', 'automatically fix vulnerabilities')\n .option('--severity <level>', 'filter by severity: low, moderate, high, critical')\n .option('--include-dev', 'include dev dependencies in scan')\n .option('--snyk', 'include Snyk scan (requires snyk CLI)')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n );\n\n const securityCommand = new SecurityCommand(formatter);\n\n await securityCommand.execute({\n workspace: globalOptions.workspace,\n format: options.format,\n audit: options.audit,\n fixVulns: options.fixVulns,\n severity: options.severity,\n includeDev: options.includeDev,\n snyk: options.snyk,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Init command\n program\n .command('init')\n .alias('i')\n .description('initialize PCU configuration and PNPM workspace')\n .option('--force', 'overwrite existing configuration file')\n .option('--full', 'generate full configuration with all options')\n .option(\n '--create-workspace',\n 'create PNPM workspace structure if missing (default: true)',\n true\n )\n .option('--no-create-workspace', 'skip creating PNPM workspace structure')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const initCommand = new InitCommand();\n\n await initCommand.execute({\n workspace: globalOptions.workspace,\n force: options.force,\n full: options.full,\n createWorkspace: options.createWorkspace,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Add help command\n program\n .command('help')\n .alias('h')\n .argument('[command]', 'command to get help for')\n .description('display help for command')\n .action((command) => {\n if (command) {\n const cmd = program.commands.find((c) => c.name() === command);\n if (cmd) {\n cmd.help();\n } else {\n console.log(chalk.red(`Unknown command: ${command}`));\n }\n } else {\n program.help();\n }\n });\n\n // Let commander handle help and version normally\n // program.exitOverride() removed to fix help/version output\n\n // Handle shorthand options and single-letter commands by rewriting arguments\n const args = [...process.argv];\n // Map single-letter command 'i' -> init (changed from interactive mode)\n if (\n args.includes('i') &&\n !args.some(\n (a) =>\n a === 'init' ||\n a === 'update' ||\n a === '-u' ||\n a === '--update' ||\n a === '-i' ||\n a === '--interactive'\n )\n ) {\n const index = args.findIndex((arg) => arg === 'i');\n args.splice(index, 1, 'init');\n }\n\n if (args.includes('-u') || args.includes('--update')) {\n const index = args.findIndex((arg) => arg === '-u' || arg === '--update');\n args.splice(index, 1, 'update');\n } else if (\n (args.includes('-i') || args.includes('--interactive')) &&\n !args.some((a) => a === 'update' || a === '-u' || a === '--update')\n ) {\n // Map standalone -i to `update -i`\n const index = args.findIndex((arg) => arg === '-i' || arg === '--interactive');\n // Replace the flag position with 'update' and keep the flag after it\n args.splice(index, 1, 'update', '-i');\n } else if (args.includes('-c') || args.includes('--check')) {\n const index = args.findIndex((arg) => arg === '-c' || arg === '--check');\n args.splice(index, 1, 'check');\n } else if (args.includes('-a') || args.includes('--analyze')) {\n const index = args.findIndex((arg) => arg === '-a' || arg === '--analyze');\n args.splice(index, 1, 'analyze');\n } else if (args.includes('-s') || args.includes('--workspace-info')) {\n const index = args.findIndex((arg) => arg === '-s' || arg === '--workspace-info');\n args.splice(index, 1, 'workspace');\n } else if (args.includes('-t') || args.includes('--theme')) {\n const index = args.findIndex((arg) => arg === '-t' || arg === '--theme');\n args.splice(index, 1, 'theme');\n } else if (args.includes('--security-audit')) {\n const index = args.findIndex((arg) => arg === '--security-audit');\n args.splice(index, 1, 'security');\n } else if (args.includes('--security-fix')) {\n const index = args.findIndex((arg) => arg === '--security-fix');\n args.splice(index, 1, 'security', '--fix-vulns');\n }\n\n // Show help if no arguments provided\n if (args.length <= 2) {\n program.help();\n }\n\n // Handle custom --version with update checking\n if (args.includes('--version')) {\n console.log(packageJson.version);\n\n // Check for updates if not in CI and enabled in config\n if (VersionChecker.shouldCheckForUpdates() && config.advanced?.checkForUpdates !== false) {\n try {\n console.log(chalk.gray('Checking for updates...'));\n const versionResult = await VersionChecker.checkVersion(packageJson.version, {\n skipPrompt: false,\n timeout: 5000, // Longer timeout for explicit version check\n });\n\n if (versionResult.shouldPrompt) {\n const didUpdate = await VersionChecker.promptAndUpdate(versionResult);\n if (didUpdate) {\n console.log(chalk.blue('Please run your command again to use the updated version.'));\n process.exit(0);\n }\n } else if (versionResult.isLatest) {\n console.log(chalk.green('You are using the latest version!'));\n }\n } catch (error) {\n // Silently fail update check for version command\n if (args.includes('-v') || args.includes('--verbose')) {\n console.warn(chalk.yellow('⚠️ Could not check for updates:'), error);\n }\n }\n }\n\n process.exit(0);\n }\n\n // Parse command line arguments\n try {\n await program.parseAsync(args);\n } catch (error) {\n console.error(chalk.red('❌ Unexpected error:'), error);\n if (error instanceof Error && error.stack) {\n console.error(chalk.gray(error.stack));\n }\n process.exit(1);\n }\n}\n\n// Run the CLI if this file is executed directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n main().catch((error) => {\n console.error(chalk.red('❌ Fatal error:'), error);\n process.exit(1);\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/formatters/outputFormatter.ts","../../../packages/utils/src/config/config.ts","../../../packages/utils/src/config/packageFilterConfig.ts","../../../packages/utils/src/config/configLoader.ts","../../../packages/utils/src/error-handling/errorTracker.ts","../../../packages/utils/src/logger/logger.ts","../../../packages/utils/src/error-handling/userFriendlyErrorHandler.ts","../../../packages/utils/src/utils/versionChecker.ts","../../../packages/core/src/domain/value-objects/version.ts","../../../packages/core/src/domain/value-objects/workspacePath.ts","../../../packages/core/src/infrastructure/utils/npmrcParser.ts","../../../packages/core/src/infrastructure/external-services/npmRegistryService.ts","../../../packages/core/src/application/services/catalogUpdateService.ts","../../../packages/core/src/application/services/workspaceService.ts","../../../packages/core/src/domain/entities/catalog.ts","../../../packages/core/src/domain/entities/package.ts","../../../packages/core/src/domain/entities/workspace.ts","../../../packages/core/src/domain/value-objects/catalogCollection.ts","../../../packages/core/src/domain/value-objects/packageCollection.ts","../../../packages/core/src/domain/value-objects/workspaceConfig.ts","../../../packages/core/src/domain/value-objects/workspaceId.ts","../../../packages/core/src/infrastructure/cache/cache.ts","../../../packages/core/src/infrastructure/file-system/fileSystemService.ts","../../../packages/core/src/infrastructure/repositories/fileWorkspaceRepository.ts","../src/cli/themes/colorTheme.ts","../src/cli/commands/checkCommand.ts","../src/cli/commands/initCommand.ts","../src/cli/formatters/progressBar.ts","../src/cli/commands/securityCommand.ts","../src/cli/interactive/interactivePrompts.ts","../src/cli/commands/updateCommand.ts","../src/cli/index.ts"],"names":["chalk","riskColor","path","join","existsSync","readFileSync","resolve","fs","homedir","semver","mkdirSync","writeFileSync","YAML","dirname","packageJson","path4","fileURLToPath","config"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Output Formatter\n *\n * Provides formatted output for CLI commands in various formats.\n * Supports table, JSON, YAML, and minimal output formats.\n */\n\nimport {\n ImpactAnalysis,\n OutdatedReport,\n UpdateResult,\n WorkspaceStats,\n WorkspaceValidationReport,\n} from '@pcu/core';\nimport { SecurityReport } from '../commands/securityCommand.js';\n\nimport chalk from 'chalk';\nimport Table from 'cli-table3';\nimport YAML from 'yaml';\n\nexport type OutputFormat = 'table' | 'json' | 'yaml' | 'minimal';\n\n// Build ANSI escape regex without literal control characters\nconst ANSI_ESCAPE = String.fromCharCode(27);\nconst ansiRegex: RegExp = new RegExp(`${ANSI_ESCAPE}\\\\[[0-9;]*m`, 'g');\n\nexport class OutputFormatter {\n constructor(\n private readonly format: OutputFormat = 'table',\n private readonly useColor: boolean = true\n ) {}\n\n /**\n * Format outdated dependencies report\n */\n formatOutdatedReport(report: OutdatedReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2);\n case 'yaml':\n return YAML.stringify(report);\n case 'minimal':\n return this.formatOutdatedMinimal(report);\n case 'table':\n default:\n return this.formatOutdatedTable(report);\n }\n }\n\n /**\n * Format update result\n */\n formatUpdateResult(result: UpdateResult): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(result, null, 2);\n case 'yaml':\n return YAML.stringify(result);\n case 'minimal':\n return this.formatUpdateMinimal(result);\n case 'table':\n default:\n return this.formatUpdateTable(result);\n }\n }\n\n /**\n * Format impact analysis\n */\n formatImpactAnalysis(analysis: ImpactAnalysis): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(analysis, null, 2);\n case 'yaml':\n return YAML.stringify(analysis);\n case 'minimal':\n return this.formatImpactMinimal(analysis);\n case 'table':\n default:\n return this.formatImpactTable(analysis);\n }\n }\n\n /**\n * Format workspace validation report\n */\n formatValidationReport(report: WorkspaceValidationReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2);\n case 'yaml':\n return YAML.stringify(report);\n case 'minimal':\n return this.formatValidationMinimal(report);\n case 'table':\n default:\n return this.formatValidationTable(report);\n }\n }\n\n /**\n * Format workspace statistics\n */\n formatWorkspaceStats(stats: WorkspaceStats): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(stats, null, 2);\n case 'yaml':\n return YAML.stringify(stats);\n case 'minimal':\n return this.formatStatsMinimal(stats);\n case 'table':\n default:\n return this.formatStatsTable(stats);\n }\n }\n\n /**\n * Format security report\n */\n formatSecurityReport(report: SecurityReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2);\n case 'yaml':\n return YAML.stringify(report);\n case 'minimal':\n return this.formatSecurityMinimal(report);\n case 'table':\n default:\n return this.formatSecurityTable(report);\n }\n }\n\n /**\n * Format simple message with optional styling\n */\n formatMessage(message: string, type: 'success' | 'error' | 'warning' | 'info' = 'info'): string {\n if (!this.useColor) {\n return message;\n }\n\n switch (type) {\n case 'success':\n return chalk.green(message);\n case 'error':\n return chalk.red(message);\n case 'warning':\n return chalk.yellow(message);\n case 'info':\n default:\n return chalk.blue(message);\n }\n }\n\n /**\n * Format outdated dependencies as table\n */\n private formatOutdatedTable(report: OutdatedReport): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n📦 Workspace: ${report.workspace.name}`));\n lines.push(this.colorize(chalk.gray, `Path: ${report.workspace.path}`));\n\n if (!report.hasUpdates) {\n lines.push(this.colorize(chalk.green, '\\n✅ All catalog dependencies are up to date!'));\n return lines.join('\\n');\n }\n\n lines.push(\n this.colorize(chalk.yellow, `\\n🔄 Found ${report.totalOutdated} outdated dependencies\\n`)\n );\n\n for (const catalogInfo of report.catalogs) {\n if (catalogInfo.outdatedCount === 0) continue;\n\n lines.push(this.colorize(chalk.bold, `📋 Catalog: ${catalogInfo.catalogName}`));\n\n const table = new Table({\n head: this.colorizeHeaders(['Package', 'Current', 'Latest', 'Type', 'Packages']),\n style: { head: [], border: [] },\n colWidths: [25, 15, 15, 8, 20],\n });\n\n for (const dep of catalogInfo.outdatedDependencies) {\n const typeColor = this.getUpdateTypeColor(dep.updateType);\n const securityIcon = dep.isSecurityUpdate ? '🔒 ' : '';\n\n // Colorize version differences\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.currentVersion,\n dep.latestVersion,\n dep.updateType\n );\n\n table.push([\n `${securityIcon}${dep.packageName}`,\n currentColored,\n latestColored,\n this.colorize(typeColor, dep.updateType),\n `${dep.affectedPackages.length} package(s)`,\n ]);\n }\n\n lines.push(table.toString());\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format outdated dependencies minimally (npm-check-updates style)\n */\n private formatOutdatedMinimal(report: OutdatedReport): string {\n if (!report.hasUpdates) {\n return 'All dependencies up to date';\n }\n\n // Collect all dependencies first to calculate max package name width\n const allDeps: Array<{\n securityIcon: string;\n packageName: string;\n currentColored: string;\n latestColored: string;\n }> = [];\n\n for (const catalogInfo of report.catalogs) {\n for (const dep of catalogInfo.outdatedDependencies) {\n const securityIcon = dep.isSecurityUpdate ? '🔒 ' : '';\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.currentVersion,\n dep.latestVersion,\n dep.updateType\n );\n allDeps.push({\n securityIcon,\n packageName: dep.packageName,\n currentColored,\n latestColored,\n });\n }\n }\n\n // Calculate max widths for alignment\n const maxNameWidth = Math.max(\n ...allDeps.map((dep) => (dep.securityIcon + dep.packageName).length)\n );\n\n // Calculate max version widths (need to strip color codes for accurate width calculation)\n const stripAnsi = (str: string) => str.replace(ansiRegex, '');\n const maxCurrentWidth = Math.max(...allDeps.map((dep) => stripAnsi(dep.currentColored).length));\n\n // Format lines with proper alignment\n const lines: string[] = [];\n for (const dep of allDeps) {\n const nameWithIcon = dep.securityIcon + dep.packageName;\n const paddedName = nameWithIcon.padEnd(maxNameWidth);\n\n // For current version alignment, we need to pad the visible text, not the colored version\n const currentVisible = stripAnsi(dep.currentColored);\n const currentPadding = maxCurrentWidth - currentVisible.length;\n const paddedCurrent = dep.currentColored + ' '.repeat(currentPadding);\n\n lines.push(`${paddedName} ${paddedCurrent} → ${dep.latestColored}`);\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format update result as table\n */\n private formatUpdateTable(result: UpdateResult): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n📦 Workspace: ${result.workspace.name}`));\n\n if (result.success) {\n lines.push(this.colorize(chalk.green, '✅ Update completed successfully!'));\n } else {\n lines.push(this.colorize(chalk.red, '❌ Update completed with errors'));\n }\n\n lines.push('');\n\n // Updated dependencies\n if (result.updatedDependencies.length > 0) {\n lines.push(this.colorize(chalk.green, `🎉 Updated ${result.totalUpdated} dependencies:`));\n\n const table = new Table({\n head: this.colorizeHeaders(['Catalog', 'Package', 'From', 'To', 'Type']),\n style: { head: [], border: [] },\n colWidths: [15, 25, 15, 15, 8],\n });\n\n for (const dep of result.updatedDependencies) {\n const typeColor = this.getUpdateTypeColor(dep.updateType);\n\n // Colorize version differences\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.fromVersion,\n dep.toVersion,\n dep.updateType\n );\n\n table.push([\n dep.catalogName,\n dep.packageName,\n currentColored,\n latestColored,\n this.colorize(typeColor, dep.updateType),\n ]);\n }\n\n lines.push(table.toString());\n lines.push('');\n }\n\n // Skipped dependencies\n if (result.skippedDependencies.length > 0) {\n lines.push(this.colorize(chalk.yellow, `⚠️ Skipped ${result.totalSkipped} dependencies:`));\n\n for (const dep of result.skippedDependencies) {\n lines.push(` ${dep.catalogName}:${dep.packageName} - ${dep.reason}`);\n }\n lines.push('');\n }\n\n // Errors\n if (result.errors.length > 0) {\n lines.push(this.colorize(chalk.red, `❌ ${result.totalErrors} errors occurred:`));\n\n for (const error of result.errors) {\n const prefix = error.fatal ? '💥' : '⚠️ ';\n lines.push(` ${prefix} ${error.catalogName}:${error.packageName} - ${error.error}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format update result minimally (npm-check-updates style)\n */\n private formatUpdateMinimal(result: UpdateResult): string {\n const lines: string[] = [];\n\n if (result.success) {\n lines.push(`Updated ${result.totalUpdated} dependencies`);\n } else {\n lines.push(`Update failed with ${result.totalErrors} errors`);\n }\n\n if (result.updatedDependencies.length > 0) {\n // Collect version info for alignment calculation\n const depsWithVersions = result.updatedDependencies.map((dep) => {\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.fromVersion,\n dep.toVersion,\n dep.updateType\n );\n return {\n packageName: dep.packageName,\n currentColored,\n latestColored,\n };\n });\n\n // Calculate max widths for alignment\n const maxNameWidth = Math.max(...depsWithVersions.map((dep) => dep.packageName.length));\n\n const stripAnsi = (str: string) => str.replace(ansiRegex, '');\n const maxCurrentWidth = Math.max(\n ...depsWithVersions.map((dep) => stripAnsi(dep.currentColored).length)\n );\n\n for (const dep of depsWithVersions) {\n const paddedName = dep.packageName.padEnd(maxNameWidth);\n\n // Pad current version for alignment\n const currentVisible = stripAnsi(dep.currentColored);\n const currentPadding = maxCurrentWidth - currentVisible.length;\n const paddedCurrent = dep.currentColored + ' '.repeat(currentPadding);\n\n lines.push(`${paddedName} ${paddedCurrent} → ${dep.latestColored}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format impact analysis as table\n */\n private formatImpactTable(analysis: ImpactAnalysis): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n🔍 Impact Analysis: ${analysis.packageName}`));\n lines.push(this.colorize(chalk.gray, `Catalog: ${analysis.catalogName}`));\n lines.push(\n this.colorize(chalk.gray, `Update: ${analysis.currentVersion} → ${analysis.proposedVersion}`)\n );\n lines.push(this.colorize(chalk.gray, `Type: ${analysis.updateType}`));\n\n // Risk level\n const riskColor = this.getRiskColor(analysis.riskLevel);\n lines.push(this.colorize(riskColor, `Risk Level: ${analysis.riskLevel.toUpperCase()}`));\n lines.push('');\n\n // Affected packages\n if (analysis.affectedPackages.length > 0) {\n lines.push(this.colorize(chalk.bold, '📦 Affected Packages:'));\n\n const table = new Table({\n head: this.colorizeHeaders(['Package', 'Path', 'Dependency Type', 'Risk']),\n style: { head: [], border: [] },\n colWidths: [20, 30, 15, 10],\n });\n\n for (const pkg of analysis.affectedPackages) {\n const riskColor = this.getRiskColor(pkg.compatibilityRisk);\n table.push([\n pkg.packageName,\n pkg.packagePath,\n pkg.dependencyType,\n this.colorize(riskColor, pkg.compatibilityRisk),\n ]);\n }\n\n lines.push(table.toString());\n lines.push('');\n }\n\n // Security impact\n if (analysis.securityImpact.hasVulnerabilities) {\n lines.push(this.colorize(chalk.bold, '🔒 Security Impact:'));\n\n if (analysis.securityImpact.fixedVulnerabilities > 0) {\n lines.push(\n this.colorize(\n chalk.green,\n ` ✅ Fixes ${analysis.securityImpact.fixedVulnerabilities} vulnerabilities`\n )\n );\n }\n\n if (analysis.securityImpact.newVulnerabilities > 0) {\n lines.push(\n this.colorize(\n chalk.red,\n ` ⚠️ Introduces ${analysis.securityImpact.newVulnerabilities} vulnerabilities`\n )\n );\n }\n\n lines.push('');\n }\n\n // Recommendations\n if (analysis.recommendations.length > 0) {\n lines.push(this.colorize(chalk.bold, '💡 Recommendations:'));\n for (const rec of analysis.recommendations) {\n lines.push(` ${rec}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format impact analysis minimally\n */\n private formatImpactMinimal(analysis: ImpactAnalysis): string {\n return [\n `${analysis.packageName}: ${analysis.currentVersion} → ${analysis.proposedVersion}`,\n `Risk: ${analysis.riskLevel}`,\n `Affected: ${analysis.affectedPackages.length} packages`,\n ].join('\\n');\n }\n\n /**\n * Format validation report as table\n */\n private formatValidationTable(report: WorkspaceValidationReport): string {\n const lines: string[] = [];\n\n // Header\n const statusIcon = report.isValid ? '✅' : '❌';\n const statusColor = report.isValid ? chalk.green : chalk.red;\n\n lines.push(this.colorize(chalk.bold, `\\n${statusIcon} Workspace Validation`));\n lines.push(this.colorize(statusColor, `Status: ${report.isValid ? 'VALID' : 'INVALID'}`));\n lines.push('');\n\n // Workspace info\n lines.push(this.colorize(chalk.bold, '📦 Workspace Information:'));\n lines.push(` Path: ${report.workspace.path}`);\n lines.push(` Name: ${report.workspace.name}`);\n lines.push(` Packages: ${report.workspace.packageCount}`);\n lines.push(` Catalogs: ${report.workspace.catalogCount}`);\n lines.push('');\n\n // Errors\n if (report.errors.length > 0) {\n lines.push(this.colorize(chalk.red, '❌ Errors:'));\n for (const error of report.errors) {\n lines.push(` • ${error}`);\n }\n lines.push('');\n }\n\n // Warnings\n if (report.warnings.length > 0) {\n lines.push(this.colorize(chalk.yellow, '⚠️ Warnings:'));\n for (const warning of report.warnings) {\n lines.push(` • ${warning}`);\n }\n lines.push('');\n }\n\n // Recommendations\n if (report.recommendations.length > 0) {\n lines.push(this.colorize(chalk.blue, '💡 Recommendations:'));\n for (const rec of report.recommendations) {\n lines.push(` • ${rec}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format validation report minimally\n */\n private formatValidationMinimal(report: WorkspaceValidationReport): string {\n const status = report.isValid ? 'VALID' : 'INVALID';\n const errors = report.errors.length;\n const warnings = report.warnings.length;\n\n return `${status} (${errors} errors, ${warnings} warnings)`;\n }\n\n /**\n * Format workspace statistics as table\n */\n private formatStatsTable(stats: WorkspaceStats): string {\n const lines: string[] = [];\n\n lines.push(this.colorize(chalk.bold, `\\n📊 Workspace Statistics`));\n lines.push(this.colorize(chalk.gray, `Workspace: ${stats.workspace.name}`));\n lines.push('');\n\n const table = new Table({\n head: this.colorizeHeaders(['Metric', 'Count']),\n style: { head: [], border: [] },\n colWidths: [30, 10],\n });\n\n table.push(['Total Packages', stats.packages.total.toString()]);\n table.push(['Packages with Catalog Refs', stats.packages.withCatalogReferences.toString()]);\n table.push(['Total Catalogs', stats.catalogs.total.toString()]);\n table.push(['Catalog Entries', stats.catalogs.totalEntries.toString()]);\n table.push(['Total Dependencies', stats.dependencies.total.toString()]);\n table.push(['Catalog References', stats.dependencies.catalogReferences.toString()]);\n table.push(['Dependencies', stats.dependencies.byType.dependencies.toString()]);\n table.push(['Dev Dependencies', stats.dependencies.byType.devDependencies.toString()]);\n table.push(['Peer Dependencies', stats.dependencies.byType.peerDependencies.toString()]);\n table.push([\n 'Optional Dependencies',\n stats.dependencies.byType.optionalDependencies.toString(),\n ]);\n\n lines.push(table.toString());\n\n return lines.join('\\n');\n }\n\n /**\n * Format workspace statistics minimally\n */\n private formatStatsMinimal(stats: WorkspaceStats): string {\n return [\n `Packages: ${stats.packages.total}`,\n `Catalogs: ${stats.catalogs.total}`,\n `Dependencies: ${stats.dependencies.total}`,\n ].join(', ');\n }\n\n /**\n * Format security report as table\n */\n private formatSecurityTable(report: SecurityReport): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, '\\n🔒 Security Report'));\n lines.push(this.colorize(chalk.gray, `Workspace: ${report.metadata.workspacePath}`));\n lines.push(\n this.colorize(chalk.gray, `Scan Date: ${new Date(report.metadata.scanDate).toLocaleString()}`)\n );\n lines.push(this.colorize(chalk.gray, `Tools: ${report.metadata.scanTools.join(', ')}`));\n\n // Summary\n lines.push('');\n lines.push(this.colorize(chalk.bold, '📊 Summary:'));\n\n const summaryTable = new Table({\n head: this.colorizeHeaders(['Severity', 'Count']),\n style: { head: [], border: [] },\n colWidths: [15, 10],\n });\n\n summaryTable.push(['Critical', this.colorize(chalk.red, report.summary.critical.toString())]);\n summaryTable.push(['High', this.colorize(chalk.yellow, report.summary.high.toString())]);\n summaryTable.push(['Moderate', this.colorize(chalk.blue, report.summary.moderate.toString())]);\n summaryTable.push(['Low', this.colorize(chalk.green, report.summary.low.toString())]);\n summaryTable.push(['Info', this.colorize(chalk.gray, report.summary.info.toString())]);\n summaryTable.push([\n 'Total',\n this.colorize(chalk.bold, report.summary.totalVulnerabilities.toString()),\n ]);\n\n lines.push(summaryTable.toString());\n\n // Vulnerabilities\n if (report.vulnerabilities.length > 0) {\n lines.push('');\n lines.push(this.colorize(chalk.bold, '🐛 Vulnerabilities:'));\n\n const vulnTable = new Table({\n head: this.colorizeHeaders(['Package', 'Severity', 'Title', 'Fix Available']),\n style: { head: [], border: [] },\n colWidths: [20, 12, 40, 15],\n });\n\n for (const vuln of report.vulnerabilities) {\n const severityColor = this.getSeverityColor(vuln.severity);\n const fixStatus = vuln.fixAvailable\n ? typeof vuln.fixAvailable === 'string'\n ? vuln.fixAvailable\n : 'Yes'\n : 'No';\n\n vulnTable.push([\n vuln.package,\n this.colorize(severityColor, vuln.severity.toUpperCase()),\n vuln.title.length > 35 ? vuln.title.substring(0, 35) + '...' : vuln.title,\n fixStatus,\n ]);\n }\n\n lines.push(vulnTable.toString());\n }\n\n // Recommendations\n if (report.recommendations.length > 0) {\n lines.push('');\n lines.push(this.colorize(chalk.bold, '💡 Recommendations:'));\n\n for (const rec of report.recommendations) {\n lines.push(` ${rec.package}: ${rec.currentVersion} → ${rec.recommendedVersion}`);\n lines.push(` ${rec.reason} (${rec.impact})`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format security report minimally\n */\n private formatSecurityMinimal(report: SecurityReport): string {\n const vulnerabilities = report.summary.totalVulnerabilities;\n if (vulnerabilities === 0) {\n return 'No vulnerabilities found';\n }\n\n return [\n `${vulnerabilities} vulnerabilities found:`,\n ` Critical: ${report.summary.critical}`,\n ` High: ${report.summary.high}`,\n ` Moderate: ${report.summary.moderate}`,\n ` Low: ${report.summary.low}`,\n ].join('\\n');\n }\n\n /**\n * Get color for severity level\n */\n private getSeverityColor(severity: string): typeof chalk {\n switch (severity.toLowerCase()) {\n case 'critical':\n return chalk.red;\n case 'high':\n return chalk.yellow;\n case 'moderate':\n return chalk.blue;\n case 'low':\n return chalk.green;\n default:\n return chalk.gray;\n }\n }\n\n /**\n * Apply color if color is enabled\n */\n private colorize(colorFn: typeof chalk, text: string): string {\n return this.useColor ? colorFn(text) : text;\n }\n\n /**\n * Colorize table headers\n */\n private colorizeHeaders(headers: string[]): string[] {\n return this.useColor ? headers.map((h) => chalk.bold.cyan(h)) : headers;\n }\n\n /**\n * Get color for update type\n */\n private getUpdateTypeColor(updateType: string): typeof chalk {\n switch (updateType) {\n case 'major':\n return chalk.red;\n case 'minor':\n return chalk.yellow;\n case 'patch':\n return chalk.green;\n default:\n return chalk.gray;\n }\n }\n\n /**\n * Get color for risk level\n */\n private getRiskColor(riskLevel: string): typeof chalk {\n switch (riskLevel) {\n case 'high':\n return chalk.red;\n case 'medium':\n return chalk.yellow;\n case 'low':\n return chalk.green;\n default:\n return chalk.gray;\n }\n }\n\n /**\n * Colorize version differences between current and latest\n */\n private colorizeVersionDiff(\n current: string,\n latest: string,\n updateType: string\n ): {\n currentColored: string;\n latestColored: string;\n } {\n if (!this.useColor) {\n return { currentColored: current, latestColored: latest };\n }\n\n // Parse version numbers to identify different parts\n const parseVersion = (version: string) => {\n // Remove leading ^ or ~ or other prefix characters\n const cleanVersion = version.replace(/^[\\^~>=<]+/, '');\n const parts = cleanVersion.split('.');\n return {\n major: parts[0] || '0',\n minor: parts[1] || '0',\n patch: parts[2] || '0',\n extra: parts.slice(3).join('.'),\n prefix: version.substring(0, version.length - cleanVersion.length),\n };\n };\n\n const currentParts = parseVersion(current);\n const latestParts = parseVersion(latest);\n\n // Determine color based on update type for highlighting differences\n const diffColor = this.getUpdateTypeColor(updateType);\n\n // Build colored version strings by comparing each part\n const colorCurrentPart = (part: string, latestPart: string, isChanged: boolean) => {\n if (isChanged && part !== latestPart) {\n return chalk.dim.white(part); // Dim white for old version part\n }\n return chalk.white(part); // Unchanged parts in white\n };\n\n const colorLatestPart = (part: string, currentPart: string, isChanged: boolean) => {\n if (isChanged && part !== currentPart) {\n return diffColor(part); // Highlight the new version part with update type color\n }\n return chalk.white(part); // Unchanged parts in white\n };\n\n // Check which parts are different\n const majorChanged = currentParts.major !== latestParts.major;\n const minorChanged = currentParts.minor !== latestParts.minor;\n const patchChanged = currentParts.patch !== latestParts.patch;\n const extraChanged = currentParts.extra !== latestParts.extra;\n\n // Build colored current version\n let currentColored = currentParts.prefix;\n currentColored += colorCurrentPart(currentParts.major, latestParts.major, majorChanged);\n currentColored += '.';\n currentColored += colorCurrentPart(currentParts.minor, latestParts.minor, minorChanged);\n currentColored += '.';\n currentColored += colorCurrentPart(currentParts.patch, latestParts.patch, patchChanged);\n if (currentParts.extra) {\n currentColored += '.' + colorCurrentPart(currentParts.extra, latestParts.extra, extraChanged);\n }\n\n // Build colored latest version\n let latestColored = latestParts.prefix;\n latestColored += colorLatestPart(latestParts.major, currentParts.major, majorChanged);\n latestColored += '.';\n latestColored += colorLatestPart(latestParts.minor, currentParts.minor, minorChanged);\n latestColored += '.';\n latestColored += colorLatestPart(latestParts.patch, currentParts.patch, patchChanged);\n if (latestParts.extra) {\n latestColored += '.' + colorLatestPart(latestParts.extra, currentParts.extra, extraChanged);\n }\n\n return { currentColored, latestColored };\n }\n}\n","/**\n * Configuration System\n *\n * Handles application configuration from multiple sources:\n * - CLI arguments\n * - Configuration files (.pcurc, pcu.config.js)\n * - Environment variables\n * - Default values\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { homedir } from 'os';\nimport { join, resolve } from 'path';\n\nexport interface PcuConfig {\n // Registry settings\n registry: {\n url: string;\n timeout: number;\n retries: number;\n cache: boolean;\n cacheTtl: number; // TTL in seconds\n };\n\n // Update behavior\n update: {\n target: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n includePrerelease: boolean;\n interactive: boolean;\n createBackup: boolean;\n force: boolean;\n };\n\n // Output formatting\n output: {\n format: 'table' | 'json' | 'yaml' | 'minimal';\n color: boolean;\n verbose: boolean;\n silent: boolean;\n };\n\n // Workspace settings\n workspace: {\n autoDetect: boolean;\n patterns: string[];\n excludePatterns: string[];\n };\n\n // Notification settings\n notification: {\n enabled: boolean;\n onSuccess: boolean;\n onError: boolean;\n methods: Array<'console' | 'desktop' | 'webhook'>;\n webhook?: {\n url: string;\n method: 'POST' | 'PUT';\n headers: Record<string, string>;\n };\n };\n\n // Logging\n logging: {\n level: 'error' | 'warn' | 'info' | 'debug';\n file?: string;\n maxSize: string; // e.g., '10MB'\n maxFiles: number;\n };\n}\n\nexport const DEFAULT_CONFIG: PcuConfig = {\n registry: {\n url: 'https://registry.npmjs.org',\n timeout: 30000,\n retries: 3,\n cache: true,\n cacheTtl: 3600, // 1 hour\n },\n\n update: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n createBackup: false,\n force: false,\n },\n\n output: {\n format: 'table',\n color: true,\n verbose: false,\n silent: false,\n },\n\n workspace: {\n autoDetect: true,\n patterns: ['packages/*', 'apps/*'],\n excludePatterns: ['**/node_modules/**', '**/dist/**', '**/build/**'],\n },\n\n notification: {\n enabled: false,\n onSuccess: true,\n onError: true,\n methods: ['console'],\n },\n\n logging: {\n level: 'info',\n maxSize: '10MB',\n maxFiles: 5,\n },\n};\n\nexport class ConfigManager {\n private config: PcuConfig;\n private configPath?: string;\n\n constructor() {\n this.config = { ...DEFAULT_CONFIG };\n this.loadConfig();\n }\n\n /**\n * Get the current configuration\n */\n getConfig(): Readonly<PcuConfig> {\n return this.config;\n }\n\n /**\n * Get a specific configuration value using dot notation\n */\n get<T = any>(path: string): T {\n return this.getNestedValue(this.config, path);\n }\n\n /**\n * Set a configuration value using dot notation\n */\n set(path: string, value: any): void {\n this.setNestedValue(this.config, path, value);\n }\n\n /**\n * Merge configuration from CLI options\n */\n mergeCliOptions(\n options: Partial<{\n registry: string;\n timeout: number;\n target: string;\n prerelease: boolean;\n interactive: boolean;\n dryRun: boolean;\n force: boolean;\n format: string;\n color: boolean;\n verbose: boolean;\n silent: boolean;\n workspace: string;\n include: string[];\n exclude: string[];\n }>\n ): void {\n if (options.registry) {\n this.config.registry.url = options.registry;\n }\n if (options.timeout) {\n this.config.registry.timeout = options.timeout;\n }\n if (options.target) {\n this.config.update.target = options.target as any;\n }\n if (options.prerelease !== undefined) {\n this.config.update.includePrerelease = options.prerelease;\n }\n if (options.interactive !== undefined) {\n this.config.update.interactive = options.interactive;\n }\n if (options.force !== undefined) {\n this.config.update.force = options.force;\n }\n if (options.format) {\n this.config.output.format = options.format as any;\n }\n if (options.color !== undefined) {\n this.config.output.color = options.color;\n }\n if (options.verbose !== undefined) {\n this.config.output.verbose = options.verbose;\n }\n if (options.silent !== undefined) {\n this.config.output.silent = options.silent;\n }\n if (options.include) {\n // Add to existing patterns\n this.config.workspace.patterns.push(...options.include);\n }\n if (options.exclude) {\n // Add to existing exclude patterns\n this.config.workspace.excludePatterns.push(...options.exclude);\n }\n }\n\n /**\n * Load configuration from files and environment\n */\n private loadConfig(): void {\n // Load from files (in order of priority)\n this.loadFromFile(this.findConfigFile());\n\n // Load from environment variables\n this.loadFromEnvironment();\n }\n\n /**\n * Find configuration file\n */\n private findConfigFile(): string | undefined {\n const configNames = ['.pcurc', '.pcurc.json', '.pcurc.js', 'pcu.config.js', 'pcu.config.json'];\n\n // Check current directory\n for (const name of configNames) {\n const filePath = resolve(process.cwd(), name);\n if (existsSync(filePath)) {\n return filePath;\n }\n }\n\n // Check home directory\n for (const name of configNames) {\n const filePath = join(homedir(), name);\n if (existsSync(filePath)) {\n return filePath;\n }\n }\n\n return undefined;\n }\n\n /**\n * Load configuration from file\n */\n private loadFromFile(filePath?: string): void {\n if (!filePath || !existsSync(filePath)) {\n return;\n }\n\n try {\n let fileConfig: Partial<PcuConfig>;\n\n if (filePath.endsWith('.js')) {\n // Dynamic import for ES modules\n delete require.cache[require.resolve(filePath)];\n fileConfig = require(filePath);\n\n // Handle default export\n if (fileConfig && typeof fileConfig === 'object' && 'default' in fileConfig) {\n fileConfig = (fileConfig as any).default;\n }\n } else {\n // JSON file\n const content = readFileSync(filePath, 'utf-8');\n fileConfig = JSON.parse(content);\n }\n\n // Deep merge with current config\n this.config = this.deepMerge(this.config, fileConfig);\n this.configPath = filePath;\n } catch (error) {\n console.warn(`Failed to load config from ${filePath}:`, error);\n }\n }\n\n /**\n * Load configuration from environment variables\n */\n private loadFromEnvironment(): void {\n const envConfig: Partial<PcuConfig> = {};\n\n // Registry settings\n if (process.env.PCU_REGISTRY_URL) {\n envConfig.registry = { ...this.config.registry, url: process.env.PCU_REGISTRY_URL };\n }\n if (process.env.PCU_REGISTRY_TIMEOUT) {\n envConfig.registry = {\n ...(envConfig.registry || this.config.registry),\n timeout: parseInt(process.env.PCU_REGISTRY_TIMEOUT, 10),\n };\n }\n\n // Update settings\n if (process.env.PCU_UPDATE_TARGET) {\n envConfig.update = {\n ...this.config.update,\n target: process.env.PCU_UPDATE_TARGET as any,\n };\n }\n if (process.env.PCU_UPDATE_PRERELEASE) {\n envConfig.update = {\n ...(envConfig.update || this.config.update),\n includePrerelease: process.env.PCU_UPDATE_PRERELEASE === 'true',\n };\n }\n\n // Output settings\n if (process.env.PCU_OUTPUT_FORMAT) {\n envConfig.output = {\n ...this.config.output,\n format: process.env.PCU_OUTPUT_FORMAT as any,\n };\n }\n if (process.env.PCU_OUTPUT_COLOR) {\n envConfig.output = {\n ...(envConfig.output || this.config.output),\n color: process.env.PCU_OUTPUT_COLOR !== 'false',\n };\n }\n\n // Logging settings\n if (process.env.PCU_LOG_LEVEL) {\n envConfig.logging = {\n ...this.config.logging,\n level: process.env.PCU_LOG_LEVEL as any,\n };\n }\n if (process.env.PCU_LOG_FILE) {\n envConfig.logging = {\n ...(envConfig.logging || this.config.logging),\n file: process.env.PCU_LOG_FILE,\n };\n }\n\n // Merge environment config\n this.config = this.deepMerge(this.config, envConfig);\n }\n\n /**\n * Get nested value using dot notation\n */\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n\n /**\n * Set nested value using dot notation (protected against prototype pollution)\n */\n private setNestedValue(obj: any, path: string, value: any): void {\n const keys = path.split('.');\n const lastKey = keys.pop()!;\n\n // Validate that keys don't include prototype pollution attempts\n if (keys.some((key) => key === '__proto__' || key === 'constructor' || key === 'prototype')) {\n throw new Error('Invalid key path: prototype pollution attempt detected');\n }\n\n if (lastKey === '__proto__' || lastKey === 'constructor' || lastKey === 'prototype') {\n throw new Error('Invalid key: prototype pollution attempt detected');\n }\n\n const target = keys.reduce((current, key) => {\n // Additional validation for each key in the path\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n throw new Error(`Invalid key in path: ${key}`);\n }\n\n if (!(key in current)) {\n // Use Object.defineProperty for safer property creation\n Object.defineProperty(current, key, {\n value: Object.create(null),\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n return current[key];\n }, obj);\n\n // Use Object.defineProperty for safer final assignment\n Object.defineProperty(target, lastKey, {\n value: value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n\n /**\n * Deep merge two objects (protected against prototype pollution)\n */\n private deepMerge(target: any, source: any): any {\n if (!source || typeof source !== 'object') {\n return target;\n }\n\n const result = { ...target };\n\n for (const key in source) {\n // Prevent prototype pollution\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n continue;\n }\n\n if (Object.hasOwn(source, key)) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n result[key] = this.deepMerge(target[key] || {}, source[key]);\n } else {\n result[key] = source[key];\n }\n }\n }\n\n return result;\n }\n\n /**\n * Get configuration file path\n */\n getConfigPath(): string | undefined {\n return this.configPath;\n }\n\n /**\n * Validate configuration\n */\n validate(): { isValid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // Validate registry URL\n try {\n new URL(this.config.registry.url);\n } catch {\n errors.push('Invalid registry URL');\n }\n\n // Validate timeout\n if (this.config.registry.timeout <= 0) {\n errors.push('Registry timeout must be positive');\n }\n\n // Validate cache TTL\n if (this.config.registry.cacheTtl <= 0) {\n errors.push('Cache TTL must be positive');\n }\n\n // Validate update target\n const validTargets = ['latest', 'greatest', 'minor', 'patch', 'newest'];\n if (!validTargets.includes(this.config.update.target)) {\n errors.push(`Invalid update target: ${this.config.update.target}`);\n }\n\n // Validate output format\n const validFormats = ['table', 'json', 'yaml', 'minimal'];\n if (!validFormats.includes(this.config.output.format)) {\n errors.push(`Invalid output format: ${this.config.output.format}`);\n }\n\n // Validate log level\n const validLevels = ['error', 'warn', 'info', 'debug'];\n if (!validLevels.includes(this.config.logging.level)) {\n errors.push(`Invalid log level: ${this.config.logging.level}`);\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * Export current configuration to file\n */\n async exportConfig(filePath: string, format: 'json' | 'js' = 'json'): Promise<void> {\n const { writeFile } = await import('fs/promises');\n\n let content: string;\n\n if (format === 'js') {\n content = `module.exports = ${JSON.stringify(this.config, null, 2)};`;\n } else {\n content = JSON.stringify(this.config, null, 2);\n }\n\n await writeFile(filePath, content, 'utf-8');\n }\n}\n\n// Global configuration instance\nlet configInstance: ConfigManager | undefined;\n\n/**\n * Get the global configuration instance\n */\nexport function getConfig(): ConfigManager {\n if (!configInstance) {\n configInstance = new ConfigManager();\n }\n return configInstance;\n}\n\n/**\n * Reset the global configuration instance (useful for testing)\n */\nexport function resetConfig(): void {\n configInstance = undefined;\n}\n","/**\n * PCU Configuration System\n *\n * Defines configuration types and provides default configuration.\n * User configuration can override any part of the default configuration.\n */\n\nexport interface PackageRule {\n patterns: string[];\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n autoUpdate?: boolean;\n requireConfirmation?: boolean;\n groupUpdate?: boolean;\n relatedPackages?: string[]; // 相关包会自动遵循相同的版本策略\n}\n\nexport interface SecurityConfig {\n autoFixVulnerabilities?: boolean;\n allowMajorForSecurity?: boolean;\n notifyOnSecurityUpdate?: boolean;\n}\n\nexport interface DefaultsConfig {\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n includePrerelease?: boolean;\n interactive?: boolean;\n dryRun?: boolean;\n createBackup?: boolean;\n format?: 'table' | 'json' | 'yaml' | 'minimal';\n}\n\nexport interface AdvancedConfig {\n concurrency?: number;\n timeout?: number;\n retries?: number;\n cacheValidityMinutes?: number;\n checkForUpdates?: boolean;\n}\n\nexport interface MonorepoConfig {\n syncVersions?: string[];\n catalogPriority?: string[];\n}\n\nexport interface PackageFilterConfig {\n exclude?: string[];\n include?: string[];\n defaults?: DefaultsConfig;\n packageRules?: PackageRule[];\n security?: SecurityConfig;\n advanced?: AdvancedConfig;\n monorepo?: MonorepoConfig;\n}\n\n/**\n * Default built-in configuration\n */\nexport const DEFAULT_PACKAGE_FILTER_CONFIG: Required<PackageFilterConfig> = {\n exclude: [],\n include: [],\n defaults: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n dryRun: false,\n createBackup: false,\n format: 'table',\n },\n packageRules: [\n // React ecosystem - keep types in sync with main packages\n {\n patterns: ['react', 'react-dom'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: true,\n relatedPackages: ['@types/react', '@types/react-dom'],\n },\n // Vue ecosystem\n {\n patterns: ['vue'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n relatedPackages: ['@vue/compiler-sfc', '@vue/runtime-core'],\n },\n // Node.js types - be conservative\n {\n patterns: ['@types/node'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n },\n // Other type definitions - can update more freely\n {\n patterns: ['@types/*'],\n target: 'latest',\n autoUpdate: true,\n requireConfirmation: false,\n groupUpdate: false,\n },\n // Dev tools - minor updates are usually safe\n {\n patterns: ['eslint*', 'prettier', '@typescript-eslint/*', 'vitest', 'jest'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: false,\n groupUpdate: true,\n },\n // Build tools - be more conservative\n {\n patterns: ['typescript', 'webpack*', 'vite*', 'rollup*'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n },\n ],\n security: {\n autoFixVulnerabilities: true,\n allowMajorForSecurity: true,\n notifyOnSecurityUpdate: false,\n },\n advanced: {\n concurrency: 5,\n timeout: 30000,\n retries: 3,\n cacheValidityMinutes: 60,\n checkForUpdates: true,\n },\n monorepo: {\n syncVersions: [],\n catalogPriority: ['default'],\n },\n};\n\n/**\n * Configuration file names to look for\n */\nexport const CONFIG_FILE_NAMES = ['.pcurc.json', '.pcurc.js', 'pcu.config.json', 'pcu.config.js'];\n","/**\n * Configuration Loader\n *\n * Loads and merges user configuration with default configuration.\n * Supports multiple configuration file formats and locations.\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport {\n CONFIG_FILE_NAMES,\n DEFAULT_PACKAGE_FILTER_CONFIG,\n PackageFilterConfig,\n} from './packageFilterConfig.js';\n\nexport class ConfigLoader {\n private static cache = new Map<string, PackageFilterConfig>();\n\n /**\n * Load configuration from the specified directory\n */\n static loadConfig(workspacePath: string = process.cwd()): PackageFilterConfig {\n const cacheKey = workspacePath;\n if (this.cache.has(cacheKey)) {\n return this.cache.get(cacheKey)!;\n }\n\n const userConfig = this.findAndLoadUserConfig(workspacePath);\n const mergedConfig = this.mergeConfigs(DEFAULT_PACKAGE_FILTER_CONFIG, userConfig || {});\n\n this.cache.set(cacheKey, mergedConfig);\n return mergedConfig;\n }\n\n /**\n * Clear configuration cache\n */\n static clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Find and load user configuration file\n */\n private static findAndLoadUserConfig(workspacePath: string): PackageFilterConfig | null {\n for (const fileName of CONFIG_FILE_NAMES) {\n const configPath = join(workspacePath, fileName);\n if (existsSync(configPath)) {\n try {\n return this.loadConfigFile(configPath);\n } catch (error) {\n console.warn(`Warning: Failed to load config file ${configPath}:`, error);\n continue;\n }\n }\n }\n return null;\n }\n\n /**\n * Load configuration from a specific file\n */\n private static loadConfigFile(configPath: string): PackageFilterConfig {\n const content = readFileSync(configPath, 'utf-8');\n\n if (configPath.endsWith('.json')) {\n return JSON.parse(content) as PackageFilterConfig;\n }\n\n if (configPath.endsWith('.js')) {\n // For JavaScript config files, we would need dynamic import\n // For now, let's focus on JSON support\n throw new Error('JavaScript config files are not yet supported');\n }\n\n throw new Error(`Unsupported config file format: ${configPath}`);\n }\n\n /**\n * Deep merge two configuration objects\n */\n private static mergeConfigs(\n defaultConfig: Required<PackageFilterConfig>,\n userConfig: PackageFilterConfig\n ): PackageFilterConfig {\n const merged: PackageFilterConfig = JSON.parse(JSON.stringify(defaultConfig));\n\n // Merge simple arrays and objects\n if (userConfig.exclude) {\n merged.exclude = [...(merged.exclude || []), ...userConfig.exclude];\n }\n\n if (userConfig.include) {\n merged.include = [...(merged.include || []), ...userConfig.include];\n }\n\n if (userConfig.defaults) {\n merged.defaults = { ...merged.defaults, ...userConfig.defaults };\n }\n\n if (userConfig.security) {\n merged.security = { ...merged.security, ...userConfig.security };\n }\n\n if (userConfig.advanced) {\n merged.advanced = { ...merged.advanced, ...userConfig.advanced };\n }\n\n if (userConfig.monorepo) {\n merged.monorepo = { ...merged.monorepo, ...userConfig.monorepo };\n\n // For arrays in monorepo config, replace rather than merge\n if (userConfig.monorepo.syncVersions) {\n merged.monorepo!.syncVersions = userConfig.monorepo.syncVersions;\n }\n if (userConfig.monorepo.catalogPriority) {\n merged.monorepo!.catalogPriority = userConfig.monorepo.catalogPriority;\n }\n }\n\n // Package rules need special handling - user rules override default rules with same patterns\n if (userConfig.packageRules) {\n const defaultRules = merged.packageRules || [];\n const userRules = userConfig.packageRules;\n\n // Start with default rules, but remove any that would be overridden by user rules\n const filteredDefaultRules = defaultRules.filter(\n (defaultRule) =>\n !userRules.some((userRule) =>\n // Check if any user rule pattern overlaps with this default rule\n userRule.patterns.some((userPattern) =>\n defaultRule.patterns.some(\n (defaultPattern) =>\n userPattern === defaultPattern ||\n (userPattern.includes('*') &&\n this.patternsOverlap(userPattern, defaultPattern)) ||\n (defaultPattern.includes('*') &&\n this.patternsOverlap(defaultPattern, userPattern))\n )\n )\n )\n );\n\n // Combine filtered default rules with user rules (user rules take priority)\n merged.packageRules = [...filteredDefaultRules, ...userRules];\n }\n\n return merged;\n }\n\n /**\n * Get effective configuration for a specific package\n */\n static getPackageConfig(\n packageName: string,\n config: PackageFilterConfig\n ): {\n shouldUpdate: boolean;\n target: string;\n requireConfirmation: boolean;\n autoUpdate: boolean;\n groupUpdate: boolean;\n } {\n // Check if package is explicitly excluded\n if (config.exclude?.some((pattern) => this.matchesPattern(packageName, pattern))) {\n return {\n shouldUpdate: false,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n };\n }\n\n // Check if package is explicitly included (if include list exists)\n if (config.include && config.include.length > 0) {\n const isIncluded = config.include.some((pattern) =>\n this.matchesPattern(packageName, pattern)\n );\n if (!isIncluded) {\n return {\n shouldUpdate: false,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n };\n }\n }\n\n // First check if package is in relatedPackages of any rule (higher priority)\n let matchingRule = config.packageRules?.find((rule) =>\n rule.relatedPackages?.some((relatedPattern) =>\n this.matchesPattern(packageName, relatedPattern)\n )\n );\n\n // If no relatedPackages match, find direct pattern match\n if (!matchingRule) {\n matchingRule = config.packageRules?.find((rule) =>\n rule.patterns.some((pattern) => this.matchesPattern(packageName, pattern))\n );\n }\n\n if (matchingRule) {\n return {\n shouldUpdate: true,\n target: matchingRule.target || config.defaults?.target || 'latest',\n requireConfirmation: matchingRule.requireConfirmation || false,\n autoUpdate: matchingRule.autoUpdate || false,\n groupUpdate: matchingRule.groupUpdate || false,\n };\n }\n\n // Use default configuration\n return {\n shouldUpdate: true,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n };\n }\n\n /**\n * Simple glob pattern matching\n */\n private static matchesPattern(packageName: string, pattern: string): boolean {\n const regexPattern = pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.');\n const regex = new RegExp(`^${regexPattern}$`, 'i');\n return regex.test(packageName);\n }\n\n /**\n * Check if two patterns overlap (one could match packages that the other matches)\n */\n private static patternsOverlap(pattern1: string, pattern2: string): boolean {\n // Simple implementation: check if either pattern would match the other as a package name\n return (\n this.matchesPattern(pattern1.replace(/\\*/g, 'x'), pattern2) ||\n this.matchesPattern(pattern2.replace(/\\*/g, 'x'), pattern1)\n );\n }\n}\n","/**\n * Error Tracker\n *\n * Tracks skipped packages and error statistics for summary reporting.\n */\n\nexport interface SkippedPackage {\n name: string;\n reason: 'not-found' | 'network' | 'empty-version' | 'other';\n originalError?: string;\n}\n\nexport class ErrorTracker {\n private static skippedPackages: SkippedPackage[] = [];\n private static errorCounts = {\n notFound: 0,\n network: 0,\n emptyVersion: 0,\n security: 0,\n other: 0,\n };\n\n /**\n * Track a skipped package\n */\n static trackSkippedPackage(packageName: string, error: Error): void {\n let reason: SkippedPackage['reason'] = 'other';\n\n if (error.message.includes('404') || error.message.includes('Not found')) {\n reason = 'not-found';\n this.errorCounts.notFound++;\n } else if (error.message.includes('Version string cannot be empty')) {\n reason = 'empty-version';\n this.errorCounts.emptyVersion++;\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n reason = 'network';\n this.errorCounts.network++;\n } else {\n this.errorCounts.other++;\n }\n\n this.skippedPackages.push({\n name: packageName,\n reason,\n originalError: error.message,\n });\n }\n\n /**\n * Track a security check failure\n */\n static trackSecurityFailure(): void {\n this.errorCounts.security++;\n }\n\n /**\n * Get skipped packages by reason\n */\n static getSkippedPackages(): {\n notFound: string[];\n network: string[];\n emptyVersion: string[];\n other: string[];\n } {\n const grouped = {\n notFound: this.skippedPackages.filter((p) => p.reason === 'not-found').map((p) => p.name),\n network: this.skippedPackages.filter((p) => p.reason === 'network').map((p) => p.name),\n emptyVersion: this.skippedPackages\n .filter((p) => p.reason === 'empty-version')\n .map((p) => p.name),\n other: this.skippedPackages.filter((p) => p.reason === 'other').map((p) => p.name),\n };\n\n return grouped;\n }\n\n /**\n * Get error statistics\n */\n static getErrorStats(): typeof ErrorTracker.errorCounts {\n return { ...this.errorCounts };\n }\n\n /**\n * Get total skipped count\n */\n static getTotalSkipped(): number {\n return this.skippedPackages.length;\n }\n\n /**\n * Reset all tracking data\n */\n static reset(): void {\n this.skippedPackages = [];\n this.errorCounts = {\n notFound: 0,\n network: 0,\n emptyVersion: 0,\n security: 0,\n other: 0,\n };\n }\n\n /**\n * Get all skipped package details\n */\n static getAllSkippedPackages(): SkippedPackage[] {\n return [...this.skippedPackages];\n }\n}\n","/**\n * Logging System\n *\n * Provides structured logging with multiple output targets and log levels.\n * Integrates with the configuration system for runtime control.\n */\n\nimport { existsSync, mkdirSync, statSync, writeFileSync } from 'fs';\nimport { dirname, resolve } from 'path';\nimport { getConfig } from '../config/config.js';\n\nexport type LogLevel = 'error' | 'warn' | 'info' | 'debug';\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n message: string;\n context?: string;\n data?: any;\n error?: Error;\n}\n\nexport interface LoggerOptions {\n context?: string | undefined;\n level?: LogLevel | undefined;\n file?: string | undefined;\n console?: boolean | undefined;\n json?: boolean | undefined;\n}\n\nexport class Logger {\n private context: string;\n private options: {\n context: string;\n level: LogLevel;\n file: string | undefined;\n console: boolean;\n json: boolean;\n };\n private static instances = new Map<string, Logger>();\n\n private constructor(context: string, options: Partial<LoggerOptions> = {}) {\n this.context = context;\n\n const config = getConfig().getConfig();\n\n this.options = {\n context: options.context || context,\n level: options.level || config.logging.level,\n file: options.file || config.logging.file,\n console: options.console !== undefined ? options.console : !config.output.silent,\n json: options.json || false,\n } as any;\n }\n\n /**\n * Get or create logger instance for a specific context\n */\n static getLogger(context: string, options?: Partial<LoggerOptions>): Logger {\n const key = `${context}:${JSON.stringify(options || {})}`;\n\n if (!Logger.instances.has(key)) {\n Logger.instances.set(key, new Logger(context, options));\n }\n\n return Logger.instances.get(key)!;\n }\n\n /**\n * Create a child logger with additional context\n */\n child(childContext: string, options?: Partial<LoggerOptions>): Logger {\n const fullContext = `${this.context}:${childContext}`;\n return Logger.getLogger(fullContext, { ...this.options, ...options });\n }\n\n /**\n * Log error message\n */\n error(message: string, error?: Error, data?: any): void {\n this.log('error', message, { ...(error && { error }), ...(data && { data }) });\n }\n\n /**\n * Log warning message\n */\n warn(message: string, data?: any): void {\n this.log('warn', message, { data });\n }\n\n /**\n * Log info message\n */\n info(message: string, data?: any): void {\n this.log('info', message, { data });\n }\n\n /**\n * Log debug message\n */\n debug(message: string, data?: any): void {\n this.log('debug', message, { data });\n }\n\n /**\n * Log with specific level\n */\n log(level: LogLevel, message: string, extra: { error?: Error; data?: any } = {}): void {\n if (!this.shouldLog(level)) {\n return;\n }\n\n const entry: LogEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n context: this.context,\n ...extra,\n };\n\n this.writeLog(entry);\n }\n\n /**\n * Check if should log at given level\n */\n private shouldLog(level: LogLevel): boolean {\n const levels: Record<LogLevel, number> = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n };\n\n return levels[level] <= levels[this.options.level];\n }\n\n /**\n * Write log entry to configured outputs\n */\n private writeLog(entry: LogEntry): void {\n // Write to console\n if (this.options.console) {\n this.writeToConsole(entry);\n }\n\n // Write to file\n if (this.options.file) {\n this.writeToFile(entry);\n }\n }\n\n /**\n * Write to console with colors\n */\n private writeToConsole(entry: LogEntry): void {\n const config = getConfig().getConfig();\n const useColors = config.output.color;\n\n let colorFn: (text: string) => string;\n let consoleMethod: 'error' | 'warn' | 'info' | 'log';\n\n if (useColors) {\n // Simple color functions (avoiding external dependencies)\n const colors = {\n error: (text: string) => `\\u001b[31m${text}\\u001b[0m`, // Red\n warn: (text: string) => `\\u001b[33m${text}\\u001b[0m`, // Yellow\n info: (text: string) => `\\u001b[36m${text}\\u001b[0m`, // Cyan\n debug: (text: string) => `\\u001b[90m${text}\\u001b[0m`, // Gray\n };\n colorFn = colors[entry.level];\n consoleMethod = entry.level === 'debug' ? 'log' : entry.level;\n } else {\n colorFn = (text: string) => text;\n consoleMethod = entry.level === 'debug' ? 'log' : entry.level;\n }\n\n const timestamp = new Date(entry.timestamp).toLocaleTimeString();\n const levelStr = entry.level.toUpperCase().padEnd(5);\n const contextStr = entry.context ? `[${entry.context}]` : '';\n\n let logMessage = `${timestamp} ${colorFn(levelStr)} ${contextStr} ${entry.message}`;\n\n // Add data if present and in debug mode\n if (entry.data && entry.level === 'debug') {\n logMessage += `\\n${JSON.stringify(entry.data, null, 2)}`;\n }\n\n // Add error stack if present\n if (entry.error && entry.error.stack) {\n logMessage += `\\n${entry.error.stack}`;\n }\n\n console[consoleMethod](logMessage);\n }\n\n /**\n * Write to file\n */\n private writeToFile(entry: LogEntry): void {\n if (!this.options.file) return;\n\n try {\n const filePath = resolve(this.options.file);\n\n // Ensure directory exists\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n // Check file size and rotate if necessary\n this.rotateLogFile(filePath);\n\n // Format log entry\n let logLine: string;\n\n if (this.options.json) {\n logLine = JSON.stringify(entry) + '\\n';\n } else {\n const timestamp = entry.timestamp;\n const level = entry.level.toUpperCase().padEnd(5);\n const context = entry.context ? `[${entry.context}]` : '';\n\n logLine = `${timestamp} ${level} ${context} ${entry.message}`;\n\n if (entry.data) {\n logLine += ` | Data: ${JSON.stringify(entry.data)}`;\n }\n\n if (entry.error) {\n logLine += ` | Error: ${entry.error.message}`;\n if (entry.error.stack) {\n logLine += `\\n${entry.error.stack}`;\n }\n }\n\n logLine += '\\n';\n }\n\n // Append to file\n writeFileSync(filePath, logLine, { flag: 'a', encoding: 'utf-8' });\n } catch (error) {\n // Fallback to console if file writing fails\n console.error('Failed to write to log file:', error);\n this.writeToConsole(entry);\n }\n }\n\n /**\n * Rotate log file if it exceeds size limit\n */\n private rotateLogFile(filePath: string): void {\n if (!existsSync(filePath)) return;\n\n const config = getConfig().getConfig();\n const maxSize = this.parseSize(config.logging.maxSize);\n const maxFiles = config.logging.maxFiles;\n\n try {\n const stats = statSync(filePath);\n\n if (stats.size < maxSize) {\n return;\n }\n\n // Rotate files\n for (let i = maxFiles - 1; i > 0; i--) {\n const oldFile = `${filePath}.${i}`;\n const newFile = `${filePath}.${i + 1}`;\n\n if (existsSync(oldFile)) {\n if (i === maxFiles - 1) {\n // Delete oldest file\n require('fs').unlinkSync(oldFile);\n } else {\n // Rename file\n require('fs').renameSync(oldFile, newFile);\n }\n }\n }\n\n // Move current file to .1\n require('fs').renameSync(filePath, `${filePath}.1`);\n } catch (error) {\n console.warn('Failed to rotate log file:', error);\n }\n }\n\n /**\n * Parse size string (e.g., '10MB') to bytes\n */\n private parseSize(sizeStr: string): number {\n const units: Record<string, number> = {\n B: 1,\n KB: 1024,\n MB: 1024 * 1024,\n GB: 1024 * 1024 * 1024,\n };\n\n const match = sizeStr.match(/^(\\d+(?:\\.\\d+)?)\\s*([A-Z]+)$/i);\n if (!match) {\n return 10 * 1024 * 1024; // Default to 10MB\n }\n\n const [, size, unit] = match;\n const multiplier = units[unit?.toUpperCase() || ''] || 1;\n\n return Math.floor(parseFloat(size || '0') * multiplier);\n }\n\n /**\n * Set log level for this logger\n */\n setLevel(level: LogLevel): void {\n this.options.level = level;\n }\n\n /**\n * Get current log level\n */\n getLevel(): LogLevel {\n return this.options.level;\n }\n\n /**\n * Enable/disable console output\n */\n setConsole(enabled: boolean): void {\n this.options.console = enabled;\n }\n\n /**\n * Set log file path\n */\n setFile(filePath: string | undefined): void {\n this.options.file = filePath;\n }\n\n /**\n * Create a timer logger for performance measurement\n */\n timer(label: string): () => void {\n const start = Date.now();\n this.debug(`Timer started: ${label}`);\n\n return () => {\n const duration = Date.now() - start;\n this.debug(`Timer finished: ${label} (${duration}ms)`);\n };\n }\n\n /**\n * Clear all logger instances (useful for testing)\n */\n static clearInstances(): void {\n Logger.instances.clear();\n }\n}\n\n// Default logger instance\nexport const logger = Logger.getLogger('pcu');\n\n// Convenience functions\nexport const createLogger = (context: string, options?: Partial<LoggerOptions>) =>\n Logger.getLogger(context, options);\n","/**\n * User-Friendly Error Handler\n *\n * Provides user-friendly error messages instead of exposing technical details.\n * Categorizes errors and provides helpful suggestions where possible.\n */\n\nimport chalk from 'chalk';\nimport { Logger } from '../logger/logger.js';\nimport { ErrorTracker } from './errorTracker.js';\n\nexport interface ErrorContext {\n packageName?: string;\n operation?: string;\n details?: string;\n}\n\nexport interface PackageSuggestion {\n original: string;\n suggestions: string[];\n reason: string;\n}\n\nexport class UserFriendlyErrorHandler {\n private static logger = Logger.getLogger('ErrorHandler');\n\n // Common package name corrections\n private static packageSuggestions: Map<string, string[]> = new Map([\n // Framework packages\n ['sveltekit', ['@sveltejs/kit']],\n ['vue-router', ['vue-router']],\n ['vue-cli', ['@vue/cli']],\n ['angular-cli', ['@angular/cli']],\n ['angular-core', ['@angular/core']],\n ['angular-universal', ['@nguniversal/express-engine', '@angular/universal']],\n ['react-router', ['react-router-dom']],\n ['react-dom', ['react-dom']],\n ['nextjs', ['next']],\n ['nuxtjs', ['nuxt']],\n\n // UI Libraries\n ['material-ui', ['@mui/material', '@material-ui/core']],\n ['mui', ['@mui/material']],\n ['antd', ['antd']],\n ['ant-design', ['antd']],\n ['prime-ng', ['primeng']],\n ['primeng', ['primeng']],\n ['ng-zorro', ['ng-zorro-antd']],\n ['bootstrap-vue', ['bootstrap-vue']],\n ['vuetify', ['vuetify']],\n ['quasar', ['quasar']],\n ['onsen-ui', ['onsenui']],\n ['ionic', ['@ionic/angular', '@ionic/react', '@ionic/vue']],\n\n // CSS Frameworks\n ['tailwindcss', ['tailwindcss']],\n ['tailwind', ['tailwindcss']],\n ['bulma', ['bulma']],\n ['water-css', ['water.css']],\n ['holiday-css', ['@holiday-css/main']],\n ['wing-css', ['@wing-css/wing']],\n ['picnic-css', ['picnicss']],\n\n // Build Tools & Bundlers\n ['webpack', ['webpack']],\n ['webpack-cli', ['webpack-cli']],\n ['rollup', ['rollup']],\n ['vite', ['vite']],\n ['parcel', ['parcel']],\n ['esbuild', ['esbuild']],\n ['swc', ['@swc/core']],\n\n // Testing\n ['jest', ['jest']],\n ['vitest', ['vitest']],\n ['mocha', ['mocha']],\n ['chai', ['chai']],\n ['cypress', ['cypress']],\n ['playwright', ['@playwright/test']],\n ['puppeteer', ['puppeteer']],\n ['selenium', ['selenium-webdriver']],\n ['webdriver', ['selenium-webdriver']],\n ['lambdatest', ['@lambdatest/selenium-webdriver']],\n ['applitools', ['@applitools/eyes-selenium']],\n ['experitest', ['@experitest/seetest-client']],\n ['kobiton', ['@kobiton/api']],\n ['crossbrowsertesting', ['@crossbrowsertesting/selenium']],\n\n // Cloud Services\n ['aws-sdk', ['@aws-sdk/client-s3', 'aws-sdk']],\n ['aws-device-farm', ['@aws-sdk/client-device-farm']],\n ['firebase', ['firebase']],\n ['firebase-test-lab', ['@google-cloud/testing']],\n ['azure', ['@azure/storage-blob', '@azure/cosmos']],\n ['azure-devtest-labs', ['@azure/arm-devtestlabs']],\n ['gcp', ['@google-cloud/storage']],\n\n // Databases & ORMs\n ['mongoose', ['mongoose']],\n ['sequelize', ['sequelize']],\n ['typeorm', ['typeorm']],\n ['prisma', ['@prisma/client']],\n ['knex', ['knex']],\n ['pg', ['pg']],\n ['mysql', ['mysql2']],\n ['sqlite', ['sqlite3']],\n ['redis', ['redis']],\n ['mongodb', ['mongodb']],\n\n // Utilities\n ['lodash', ['lodash']],\n ['loadash', ['lodash']],\n ['underscore', ['underscore']],\n ['ramda', ['ramda']],\n ['rxjs', ['rxjs']],\n ['axios', ['axios']],\n ['axois', ['axios']],\n ['fetch', ['node-fetch']],\n ['node-fetch', ['node-fetch']],\n ['request', ['axios', 'node-fetch']],\n ['superagent', ['superagent']],\n\n // Date/Time\n ['moment', ['moment']],\n ['momentjs', ['moment']],\n ['dayjs', ['dayjs']],\n ['date-fns', ['date-fns']],\n ['luxon', ['luxon']],\n\n // Linting & Formatting\n ['eslint', ['eslint']],\n ['prettier', ['prettier']],\n ['tslint', ['@typescript-eslint/eslint-plugin']],\n ['typescript-eslint', ['@typescript-eslint/eslint-plugin', '@typescript-eslint/parser']],\n\n // Type Definitions\n ['types-node', ['@types/node']],\n ['@types-node', ['@types/node']],\n ['types-react', ['@types/react']],\n ['types-express', ['@types/express']],\n\n // Backend Frameworks\n ['express', ['express']],\n ['expressjs', ['express']],\n ['fastify', ['fastify']],\n ['koa', ['koa']],\n ['nestjs', ['@nestjs/core']],\n ['nest', ['@nestjs/core']],\n ['hapi', ['@hapi/hapi']],\n\n // State Management\n ['redux', ['redux']],\n ['mobx', ['mobx']],\n ['vuex', ['vuex']],\n ['pinia', ['pinia']],\n ['zustand', ['zustand']],\n ['recoil', ['recoil']],\n\n // Styling\n ['styled-components', ['styled-components']],\n ['styled-component', ['styled-components']],\n ['emotion', ['@emotion/react']],\n ['sass', ['sass']],\n ['node-sass', ['sass']],\n ['less', ['less']],\n ['stylus', ['stylus']],\n\n // Admin/CMS\n ['forestadmin', ['forest-express', 'forest-express-sequelize']],\n ['strapi', ['@strapi/strapi']],\n ['keystone', ['@keystone-6/core']],\n ['ghost', ['ghost']],\n\n // Documentation\n ['storybook', ['@storybook/react', '@storybook/vue3']],\n ['docusaurus', ['@docusaurus/core']],\n ['gitbook', ['@gitbook/cli']],\n ['typedoc', ['typedoc']],\n\n // Desktop Apps\n ['electron', ['electron']],\n ['tauri', ['@tauri-apps/api']],\n ['nwjs', ['nw']],\n\n // Mobile Development\n ['react-native', ['react-native']],\n ['expo', ['expo']],\n ['cordova', ['cordova']],\n ['phonegap', ['phonegap']],\n\n // Common Misspellings\n ['jquery', ['jquery']],\n ['boostrap', ['bootstrap']],\n ['bootstrap', ['bootstrap']],\n ['fontawesome', ['@fortawesome/fontawesome-free']],\n ['font-awesome', ['@fortawesome/fontawesome-free']],\n\n // Internationalization\n ['react-i18n', ['react-i18next']],\n ['i18n', ['i18next']],\n ['i18next', ['i18next']],\n ['vue-i18n', ['vue-i18n']],\n ['react-intl', ['react-intl']],\n ['intl', ['intl']],\n\n // Data Visualization & Charts\n ['chart', ['chart.js']],\n ['chartjs', ['chart.js']],\n ['chart.js', ['chart.js']],\n ['d3', ['d3']],\n ['d3js', ['d3']],\n ['plotly', ['plotly.js']],\n ['echarts', ['echarts']],\n ['highcharts', ['highcharts']],\n ['recharts', ['recharts']],\n ['victory', ['victory']],\n ['nivo', ['@nivo/core']],\n ['observable', ['@observablehq/plot']],\n\n // Real-time Communication & WebRTC\n ['socket.io', ['socket.io']],\n ['socketio', ['socket.io']],\n ['websocket', ['ws']],\n ['ws', ['ws']],\n ['webrtc', ['simple-peer']],\n ['peer', ['peerjs']],\n ['peerjs', ['peerjs']],\n ['signalr', ['@microsoft/signalr']],\n\n // Blockchain & Web3\n ['web3', ['web3']],\n ['web3js', ['web3']],\n ['ethers', ['ethers']],\n ['ethersjs', ['ethers']],\n ['ethereum', ['web3', 'ethers']],\n ['metamask', ['@metamask/sdk']],\n ['wagmi', ['wagmi']],\n ['rainbow-kit', ['@rainbow-me/rainbowkit']],\n ['wallet-connect', ['@walletconnect/client']],\n\n // Machine Learning & AI\n ['tensorflow', ['@tensorflow/tfjs']],\n ['tensorflowjs', ['@tensorflow/tfjs']],\n ['tfjs', ['@tensorflow/tfjs']],\n ['brain', ['brain.js']],\n ['brainjs', ['brain.js']],\n ['synaptic', ['synaptic']],\n ['ml-matrix', ['ml-matrix']],\n ['opencv', ['opencv4nodejs']],\n\n // Image Processing\n ['sharp', ['sharp']],\n ['jimp', ['jimp']],\n ['canvas', ['canvas']],\n ['fabric', ['fabric']],\n ['fabricjs', ['fabric']],\n ['konva', ['konva']],\n ['konvajs', ['konva']],\n ['p5', ['p5']],\n ['p5js', ['p5']],\n ['three', ['three']],\n ['threejs', ['three']],\n\n // Audio/Video Processing\n ['howler', ['howler']],\n ['howlerjs', ['howler']],\n ['tone', ['tone']],\n ['tonejs', ['tone']],\n ['video', ['video.js']],\n ['videojs', ['video.js']],\n ['hls', ['hls.js']],\n ['hlsjs', ['hls.js']],\n ['dash', ['dashjs']],\n ['dashjs', ['dashjs']],\n\n // Game Development\n ['phaser', ['phaser']],\n ['phaserjs', ['phaser']],\n ['pixijs', ['pixi.js']],\n ['pixi', ['pixi.js']],\n ['babylonjs', ['babylonjs']],\n ['babylon', ['babylonjs']],\n ['aframe', ['aframe']],\n\n // IoT & Hardware\n ['johnny-five', ['johnny-five']],\n ['arduino', ['johnny-five']],\n ['raspberry-pi', ['raspi']],\n ['raspi', ['raspi']],\n ['serialport', ['serialport']],\n ['noble', ['noble']],\n ['bluetooth', ['noble']],\n\n // Progressive Web Apps\n ['workbox', ['workbox-webpack-plugin']],\n ['sw-precache', ['workbox-webpack-plugin']],\n ['service-worker', ['workbox-webpack-plugin']],\n ['pwa', ['workbox-webpack-plugin']],\n\n // Map & Geolocation\n ['leaflet', ['leaflet']],\n ['mapbox', ['mapbox-gl']],\n ['google-maps', ['@googlemaps/js-api-loader']],\n ['googlemaps', ['@googlemaps/js-api-loader']],\n ['openlayers', ['ol']],\n ['ol', ['ol']],\n\n // Animation\n ['gsap', ['gsap']],\n ['anime', ['animejs']],\n ['animejs', ['animejs']],\n ['lottie', ['lottie-web']],\n ['lottie-web', ['lottie-web']],\n ['framer-motion', ['framer-motion']],\n ['react-spring', ['react-spring']],\n\n // Form & Validation\n ['formik', ['formik']],\n ['react-hook-form', ['react-hook-form']],\n ['yup', ['yup']],\n ['joi', ['joi']],\n ['ajv', ['ajv']],\n ['zod', ['zod']],\n ['superstruct', ['superstruct']],\n\n // Editor & Rich Text\n ['quill', ['quill']],\n ['quilljs', ['quill']],\n ['tinymce', ['tinymce']],\n ['ckeditor', ['@ckeditor/ckeditor5-build-classic']],\n ['slate', ['slate']],\n ['slatejs', ['slate']],\n ['draft', ['draft-js']],\n ['draftjs', ['draft-js']],\n ['monaco', ['monaco-editor']],\n ['monaco-editor', ['monaco-editor']],\n\n // HTTP & API\n ['apollo', ['@apollo/client']],\n ['apollo-client', ['@apollo/client']],\n ['graphql', ['graphql']],\n ['relay', ['react-relay']],\n ['urql', ['urql']],\n ['swr', ['swr']],\n ['react-query', ['@tanstack/react-query']],\n ['tanstack-query', ['@tanstack/react-query']],\n\n // More Common Typos\n ['reac', ['react']],\n ['reactjs', ['react']],\n ['veu', ['vue']],\n ['vuejs', ['vue']],\n ['angualr', ['@angular/core']],\n ['svelt', ['svelte']],\n ['sveltte', ['svelte']],\n ['typescirpt', ['typescript']],\n ['typescript', ['typescript']],\n ['javasript', ['node']],\n ['javascript', ['node']],\n\n // DevOps & CI/CD\n ['docker', ['dockerode']],\n ['k8s', ['@kubernetes/client-node']],\n ['kubernetes', ['@kubernetes/client-node']],\n ['kubectl', ['@kubernetes/client-node']],\n ['helm', ['@helm/sdk']],\n ['jenkins', ['jenkins']],\n ['circleci', ['@circleci/circleci-config-sdk']],\n ['github-actions', ['@actions/core', '@actions/github']],\n ['gitlab-ci', ['@gitbeaker/node']],\n ['travis', ['@travis-ci/travis-yml']],\n ['terraform', ['@cdktf/provider-aws']],\n ['ansible', ['@ansible/galaxy']],\n ['vagrant', ['vagrant']],\n ['consul', ['consul']],\n ['vault', ['node-vault']],\n ['nomad', ['nomad-client']],\n\n // 监控和日志\n ['winston', ['winston']],\n ['morgan', ['morgan']],\n ['pino', ['pino']],\n ['bunyan', ['bunyan']],\n ['log4js', ['log4js']],\n ['sentry', ['@sentry/node', '@sentry/react']],\n ['bugsnag', ['@bugsnag/js']],\n ['rollbar', ['rollbar']],\n ['newrelic', ['newrelic']],\n ['datadog', ['@datadog/browser-rum']],\n ['prometheus', ['prom-client']],\n ['grafana', ['@grafana/toolkit']],\n ['elastic', ['@elastic/elasticsearch']],\n ['elasticsearch', ['@elastic/elasticsearch']],\n ['kibana', ['@elastic/kibana-utils']],\n ['logstash', ['@elastic/logstash']],\n\n // 微服务架构\n ['microservices', ['express']],\n ['service-mesh', ['istio']],\n ['envoy', ['envoy']],\n ['istio', ['istio']],\n ['linkerd', ['linkerd']],\n ['consul-connect', ['consul']],\n ['eureka', ['eureka-js-client']],\n ['zookeeper', ['node-zookeeper-client']],\n ['etcd', ['etcd3']],\n ['grpc', ['@grpc/grpc-js']],\n ['protobuf', ['protobufjs']],\n\n // 缓存系统\n ['redis', ['redis']],\n ['memcached', ['memcached']],\n ['node-cache', ['node-cache']],\n ['memory-cache', ['memory-cache']],\n ['lru-cache', ['lru-cache']],\n ['cache-manager', ['cache-manager']],\n ['ioredis', ['ioredis']],\n ['hazelcast', ['hazelcast-client']],\n\n // 消息队列\n ['rabbitmq', ['amqplib']],\n ['kafka', ['kafkajs']],\n ['apache-kafka', ['kafkajs']],\n ['bull', ['bull']],\n ['bullmq', ['bullmq']],\n ['bee-queue', ['bee-queue']],\n ['kue', ['kue']],\n ['agenda', ['agenda']],\n ['amqp', ['amqplib']],\n ['mqtt', ['mqtt']],\n ['nats', ['nats']],\n ['zeromq', ['zeromq']],\n ['zmq', ['zeromq']],\n\n // 搜索引擎\n ['solr', ['solr-client']],\n ['algolia', ['algoliasearch']],\n ['sphinx', ['sphinxapi']],\n ['lucene', ['lucene']],\n ['whoosh', ['whoosh']],\n ['meilisearch', ['meilisearch']],\n ['typesense', ['typesense']],\n\n // 文件上传处理\n ['multer', ['multer']],\n ['formidable', ['formidable']],\n ['busboy', ['busboy']],\n ['multiparty', ['multiparty']],\n ['file-upload', ['express-fileupload']],\n ['cloudinary', ['cloudinary']],\n ['aws-s3', ['@aws-sdk/client-s3']],\n\n // 加密和安全\n ['bcrypt', ['bcrypt']],\n ['bcryptjs', ['bcryptjs']],\n ['crypto', ['crypto-js']],\n ['crypto-js', ['crypto-js']],\n ['jsonwebtoken', ['jsonwebtoken']],\n ['jwt', ['jsonwebtoken']],\n ['passport', ['passport']],\n ['helmet', ['helmet']],\n ['cors', ['cors']],\n ['express-rate-limit', ['express-rate-limit']],\n ['rate-limiter', ['express-rate-limit']],\n ['argon2', ['argon2']],\n ['scrypt', ['scrypt']],\n ['node-rsa', ['node-rsa']],\n ['speakeasy', ['speakeasy']],\n ['otplib', ['otplib']],\n\n // 邮件服务\n ['nodemailer', ['nodemailer']],\n ['sendgrid', ['@sendgrid/mail']],\n ['mailgun', ['mailgun.js']],\n ['ses', ['@aws-sdk/client-ses']],\n ['postmark', ['postmark']],\n ['sparkpost', ['sparkpost']],\n ['mandrill', ['mandrill-api']],\n ['mailchimp', ['@mailchimp/mailchimp_marketing']],\n ['email-templates', ['email-templates']],\n\n // 模板引擎\n ['handlebars', ['handlebars']],\n ['hbs', ['hbs']],\n ['mustache', ['mustache']],\n ['pug', ['pug']],\n ['jade', ['pug']], // jade was renamed to pug\n ['ejs', ['ejs']],\n ['nunjucks', ['nunjucks']],\n ['twig', ['twig']],\n ['dust', ['dustjs-linkedin']],\n\n // Serverless框架\n ['serverless', ['serverless']],\n ['sls', ['serverless']],\n ['lambda', ['aws-lambda']],\n ['azure-functions', ['@azure/functions']],\n ['google-functions', ['@google-cloud/functions-framework']],\n ['netlify-lambda', ['netlify-lambda']],\n ['vercel', ['@vercel/node']],\n ['claudia', ['claudia']],\n ['apex', ['apex']],\n ['sam', ['@aws-cdk/aws-sam']],\n\n // 更多数据库\n ['couchdb', ['nano']],\n ['pouchdb', ['pouchdb']],\n ['neo4j', ['neo4j-driver']],\n ['influxdb', ['influx']],\n ['cassandra', ['cassandra-driver']],\n ['rethinkdb', ['rethinkdb']],\n ['orientdb', ['orientjs']],\n ['arangodb', ['arangojs']],\n ['leveldb', ['level']],\n ['rocksdb', ['rocksdb']],\n ['sqlite', ['sqlite3', 'better-sqlite3']],\n ['mariadb', ['mariadb']],\n ['cockroachdb', ['pg']], // uses pg driver\n\n // 更多云服务\n ['heroku', ['heroku']],\n ['digitalocean', ['@digitalocean/droplet-api']],\n ['linode', ['@linode/api-v4']],\n ['vultr', ['@vultr/vultr-node']],\n ['scaleway', ['@scaleway/sdk']],\n ['ovh', ['ovh']],\n ['cloudflare', ['cloudflare']],\n ['fastly', ['fastly']],\n ['maxcdn', ['maxcdn']],\n ['bunnycdn', ['bunnycdn']],\n\n // 性能分析和优化\n ['lighthouse', ['lighthouse']],\n ['webpagetest', ['webpagetest']],\n ['clinic', ['clinic']],\n ['0x', ['0x']],\n ['autocannon', ['autocannon']],\n ['loadtest', ['loadtest']],\n ['artillery', ['artillery']],\n ['k6', ['k6']],\n ['benchmark', ['benchmark']],\n ['clinic.js', ['clinic']],\n\n // 更多拼写错误和变体\n ['expressjs', ['express']],\n ['node.js', ['node']],\n ['nodejs', ['node']],\n ['npm', ['npm']],\n ['yarn', ['yarn']],\n ['pnpm', ['pnpm']],\n ['bun', ['bun']],\n ['deno', ['deno']],\n ['typescript', ['typescript']],\n ['js', ['javascript']],\n ['ts', ['typescript']],\n ['html', ['html']],\n ['css', ['css']],\n ['json', ['json']],\n ['xml', ['xml2js']],\n ['yaml', ['yaml']],\n ['toml', ['@iarna/toml']],\n ['ini', ['ini']],\n ['csv', ['csv-parser', 'papaparse']],\n ['pdf', ['pdf2pic', 'pdfkit']],\n ['excel', ['xlsx']],\n ['word', ['mammoth']],\n ['zip', ['node-zip']],\n ['tar', ['tar']],\n ['gzip', ['zlib']],\n\n // 数据处理和转换\n ['cheerio', ['cheerio']],\n ['jsdom', ['jsdom']],\n ['xml2js', ['xml2js']],\n ['csv-parse', ['csv-parse']],\n ['papaparse', ['papaparse']],\n ['fast-csv', ['fast-csv']],\n ['xlsx', ['xlsx']],\n ['pdfkit', ['pdfkit']],\n ['jspdf', ['jspdf']],\n ['mammoth', ['mammoth']],\n ['pdf-parse', ['pdf-parse']],\n\n // CLI工具\n ['commander', ['commander']],\n ['yargs', ['yargs']],\n ['inquirer', ['inquirer']],\n ['chalk', ['chalk']],\n ['ora', ['ora']],\n ['cli-progress', ['cli-progress']],\n ['figlet', ['figlet']],\n ['boxen', ['boxen']],\n ['update-notifier', ['update-notifier']],\n ['meow', ['meow']],\n ['arg', ['arg']],\n ['minimist', ['minimist']],\n ]);\n\n /**\n * Handle package not found errors (404)\n */\n static handlePackageNotFound(packageName: string, context?: ErrorContext): void {\n const suggestions = this.packageSuggestions.get(packageName);\n\n if (suggestions && suggestions.length > 0) {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 不存在`));\n console.log(chalk.cyan(`💡 可能的正确包名:`));\n suggestions.forEach((suggestion) => {\n console.log(chalk.cyan(` • ${suggestion}`));\n });\n } else {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 在 npm registry 中不存在`));\n console.log(chalk.cyan(`💡 请检查包名是否正确,或者该包可能已被移除`));\n }\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, new Error('Package not found (404)'));\n\n // Log technical details for debugging\n this.logger.debug('Package not found', { packageName, context });\n }\n\n /**\n * Handle empty version errors\n */\n static handleEmptyVersion(packageName: string, context?: ErrorContext): void {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 的版本信息为空`));\n console.log(chalk.cyan(`💡 这可能是由于:`));\n console.log(chalk.cyan(` • 包的 package.json 配置问题`));\n console.log(chalk.cyan(` • catalog 配置中的版本格式错误`));\n console.log(chalk.cyan(` • npm registry 数据同步问题`));\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, new Error('Version string cannot be empty'));\n\n this.logger.debug('Empty version string', { packageName, context });\n }\n\n /**\n * Handle network/timeout errors\n */\n static handleNetworkError(packageName: string, error: Error, context?: ErrorContext): void {\n console.log(chalk.yellow(`⚠️ 检查包 \"${packageName}\" 时遇到网络问题`));\n console.log(chalk.cyan(`💡 请稍后重试,或检查网络连接`));\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, error);\n\n this.logger.debug('Network error', { packageName, error: error.message, context });\n }\n\n /**\n * Handle security check failures\n */\n static handleSecurityCheckFailure(\n packageName: string,\n error: Error,\n context?: ErrorContext\n ): void {\n // Track for statistics\n ErrorTracker.trackSecurityFailure();\n\n // Only show user-friendly message, don't expose technical details\n this.logger.debug(`Security check failed for ${packageName}`, {\n error: error.message,\n context,\n });\n\n // Don't spam the user with security check failures unless it's critical\n if (context?.operation === 'update' || context?.operation === 'security-audit') {\n console.log(chalk.yellow(`⚠️ 无法检查 \"${packageName}\" 的安全状态`));\n }\n }\n\n /**\n * Handle retry attempts silently\n */\n static handleRetryAttempt(\n packageName: string,\n attempt: number,\n maxRetries: number,\n error: Error\n ): void {\n // Log for debugging but don't spam users\n this.logger.debug(`Retry attempt ${attempt}/${maxRetries} for ${packageName}`, {\n error: error.message,\n });\n\n // Only show to user on final failure\n if (attempt === maxRetries) {\n this.handleFinalFailure(packageName, error);\n }\n }\n\n /**\n * Handle final failure after retries\n */\n static handleFinalFailure(packageName: string, error: Error): void {\n if (error.message.includes('404') || error.message.includes('Not found')) {\n this.handlePackageNotFound(packageName);\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n this.handleNetworkError(packageName, error);\n } else if (error.message.includes('Version string cannot be empty')) {\n this.handleEmptyVersion(packageName);\n } else {\n // Generic error handling\n console.log(chalk.yellow(`⚠️ 跳过包 \"${packageName}\" (检查失败)`));\n this.logger.debug('Package check failed', { packageName, error: error.message });\n }\n }\n\n /**\n * Handle general package query failures\n */\n static handlePackageQueryFailure(\n packageName: string,\n error: Error,\n context?: ErrorContext\n ): void {\n // Categorize the error and provide appropriate user message\n if (error.message.includes('404') || error.message.includes('Not found')) {\n this.handlePackageNotFound(packageName, context);\n } else if (error.message.includes('Version string cannot be empty')) {\n this.handleEmptyVersion(packageName, context);\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n this.handleNetworkError(packageName, error, context);\n } else {\n // For other errors, just skip silently and log for debugging\n ErrorTracker.trackSkippedPackage(packageName, error);\n this.logger.debug(`Package query failed for ${packageName}`, {\n error: error.message,\n context,\n });\n }\n }\n\n /**\n * Show summary of skipped packages\n */\n static showSkippedPackagesSummary(): void {\n const totalSkipped = ErrorTracker.getTotalSkipped();\n if (totalSkipped === 0) return;\n\n console.log();\n console.log(chalk.cyan(`📋 跳过了 ${totalSkipped} 个包的检查:`));\n\n const grouped = ErrorTracker.getSkippedPackages();\n\n if (grouped.notFound.length > 0) {\n console.log(\n chalk.yellow(` 不存在的包 (${grouped.notFound.length}): ${grouped.notFound.join(', ')}`)\n );\n }\n\n if (grouped.emptyVersion.length > 0) {\n console.log(\n chalk.yellow(\n ` 版本信息为空 (${grouped.emptyVersion.length}): ${grouped.emptyVersion.join(', ')}`\n )\n );\n }\n\n if (grouped.network.length > 0) {\n console.log(\n chalk.yellow(` 网络问题 (${grouped.network.length}): ${grouped.network.join(', ')}`)\n );\n }\n\n if (grouped.other.length > 0) {\n console.log(\n chalk.yellow(` 其他问题 (${grouped.other.length}): ${grouped.other.join(', ')}`)\n );\n }\n\n const stats = ErrorTracker.getErrorStats();\n if (stats.security > 0) {\n console.log(chalk.gray(` 安全检查失败: ${stats.security} 次`));\n }\n }\n\n /**\n * Get statistics for reporting\n */\n static getStatistics(): {\n totalSkipped: number;\n errorBreakdown: ReturnType<typeof ErrorTracker.getErrorStats>;\n skippedPackages: ReturnType<typeof ErrorTracker.getSkippedPackages>;\n } {\n return {\n totalSkipped: ErrorTracker.getTotalSkipped(),\n errorBreakdown: ErrorTracker.getErrorStats(),\n skippedPackages: ErrorTracker.getSkippedPackages(),\n };\n }\n\n /**\n * Reset error tracking (useful for testing)\n */\n static resetTracking(): void {\n ErrorTracker.reset();\n }\n\n /**\n * Add a new package suggestion\n */\n static addPackageSuggestion(originalName: string, suggestions: string[]): void {\n this.packageSuggestions.set(originalName, suggestions);\n }\n\n /**\n * Get suggestions for a package name\n */\n static getPackageSuggestions(packageName: string): string[] {\n return this.packageSuggestions.get(packageName) || [];\n }\n}\n","/**\n * Version Checker Utility\n *\n * Checks for newer versions of the PCU tool and provides update prompts.\n */\n\nimport chalk from 'chalk';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n// InteractivePrompts removed - prompting should be handled by CLI layer\n\nconst execAsync = promisify(exec);\n\nexport interface VersionCheckResult {\n isLatest: boolean;\n currentVersion: string;\n latestVersion: string;\n shouldPrompt: boolean;\n}\n\nexport interface VersionCheckOptions {\n skipPrompt?: boolean;\n timeout?: number;\n packageName?: string;\n}\n\nexport class VersionChecker {\n private static readonly DEFAULT_TIMEOUT = 5000; // 5 seconds\n private static readonly DEFAULT_PACKAGE = 'pnpm-catalog-updates';\n\n /**\n * Check if current version is the latest\n */\n static async checkVersion(\n currentVersion: string,\n options: VersionCheckOptions = {}\n ): Promise<VersionCheckResult> {\n const {\n skipPrompt = false,\n timeout = this.DEFAULT_TIMEOUT,\n packageName = this.DEFAULT_PACKAGE,\n } = options;\n\n try {\n // Get latest version from npm with timeout\n const latestVersion = await this.getLatestVersion(packageName, timeout);\n\n const isLatest = this.compareVersions(currentVersion, latestVersion) >= 0;\n\n return {\n isLatest,\n currentVersion,\n latestVersion,\n shouldPrompt: !isLatest && !skipPrompt,\n };\n } catch (error) {\n console.warn(chalk.yellow('⚠️ Failed to check for updates:'), error);\n return {\n isLatest: true, // Assume latest if check fails\n currentVersion,\n latestVersion: currentVersion,\n shouldPrompt: false,\n };\n }\n }\n\n /**\n * Display update notification (prompting should be handled by CLI layer)\n */\n static displayUpdateNotification(versionResult: VersionCheckResult): void {\n if (!versionResult.shouldPrompt) {\n return;\n }\n\n console.log();\n console.log(chalk.cyan('📦 Update Available!'));\n console.log(\n chalk.gray(\n `Current version: ${versionResult.currentVersion} → Latest: ${versionResult.latestVersion}`\n )\n );\n console.log(chalk.gray('Run with --update flag to update to the latest version.'));\n console.log();\n }\n\n /**\n * Prompt user and update if they choose to\n */\n static async promptAndUpdate(versionResult: VersionCheckResult): Promise<boolean> {\n if (!versionResult.shouldPrompt) {\n return false;\n }\n\n try {\n // For now, just display notification and don't prompt\n // This avoids adding inquirer dependency to utils package\n this.displayUpdateNotification(versionResult);\n\n // Auto-perform update for now (can be enhanced with prompting later)\n console.log(chalk.yellow('Auto-updating to latest version...'));\n return await this.performUpdateAction();\n } catch (error) {\n console.error(chalk.red('Failed to prompt and update:'), error);\n return false;\n }\n }\n\n /**\n * Perform update without prompting\n */\n static async performUpdateAction(): Promise<boolean> {\n console.log(chalk.blue('🔄 Updating pnpm-catalog-updates...'));\n try {\n await this.performUpdate();\n console.log(chalk.green('✅ Successfully updated! Please restart the command.'));\n return true;\n } catch (error) {\n console.error(chalk.red('❌ Update failed:'), error);\n console.log(\n chalk.gray('You can manually update with: npm install -g pnpm-catalog-updates@latest')\n );\n return false;\n }\n }\n\n /**\n * Get latest version from npm registry\n */\n private static async getLatestVersion(packageName: string, timeout: number): Promise<string> {\n const command = `npm view ${packageName} version`;\n\n try {\n const { stdout } = await this.executeWithTimeout(command, timeout);\n return stdout.trim();\n } catch (error) {\n // Fallback: try with different npm commands\n try {\n const { stdout } = await this.executeWithTimeout(\n `npm info ${packageName} version`,\n timeout\n );\n return stdout.trim();\n } catch (fallbackError) {\n throw new Error(`Failed to get latest version: ${error}`);\n }\n }\n }\n\n /**\n * Execute update command\n */\n private static async performUpdate(): Promise<void> {\n // Try global update first, then fallback to different methods\n const commands = [\n 'npm install -g pnpm-catalog-updates@latest',\n 'npm update -g pnpm-catalog-updates',\n 'pnpm add -g pnpm-catalog-updates@latest',\n 'yarn global add pnpm-catalog-updates@latest',\n ];\n\n for (const command of commands) {\n try {\n console.log(chalk.gray(`Executing: ${command}`));\n await execAsync(command, { timeout: 30000 });\n return; // Success\n } catch (error) {\n console.warn(chalk.yellow(`Command failed: ${command}`));\n // Continue to next command\n }\n }\n\n throw new Error('All update commands failed');\n }\n\n /**\n * Execute command with timeout\n */\n private static async executeWithTimeout(\n command: string,\n timeout: number\n ): Promise<{ stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n const child = exec(command, { timeout }, (error, stdout, stderr) => {\n if (error) {\n reject(error);\n } else {\n resolve({ stdout, stderr });\n }\n });\n\n // Additional timeout handling\n const timer = setTimeout(() => {\n child.kill();\n reject(new Error(`Command timed out after ${timeout}ms`));\n }, timeout);\n\n child.on('exit', () => {\n clearTimeout(timer);\n });\n });\n }\n\n /**\n * Compare two version strings\n * Returns: -1 if a < b, 0 if a === b, 1 if a > b\n */\n private static compareVersions(a: string, b: string): number {\n const cleanA = a.replace(/^v/, '').replace(/[^0-9.]/g, '');\n const cleanB = b.replace(/^v/, '').replace(/[^0-9.]/g, '');\n\n const partsA = cleanA.split('.').map(Number);\n const partsB = cleanB.split('.').map(Number);\n\n const maxLength = Math.max(partsA.length, partsB.length);\n\n for (let i = 0; i < maxLength; i++) {\n const partA = partsA[i] || 0;\n const partB = partsB[i] || 0;\n\n if (partA < partB) return -1;\n if (partA > partB) return 1;\n }\n\n return 0;\n }\n\n /**\n * Check if running in CI environment where prompts should be skipped\n */\n static isCI(): boolean {\n return !!(\n process.env.CI ||\n process.env.CONTINUOUS_INTEGRATION ||\n process.env.BUILD_NUMBER ||\n process.env.RUN_ID ||\n process.env.GITHUB_ACTIONS\n );\n }\n\n /**\n * Get update frequency preference from environment\n */\n static shouldCheckForUpdates(): boolean {\n const skipCheck = process.env.PCU_SKIP_VERSION_CHECK;\n if (skipCheck === 'true' || skipCheck === '1') {\n return false;\n }\n\n // Skip in CI environments by default\n if (this.isCI()) {\n return false;\n }\n\n return true;\n }\n}\n","/**\n * Version Value Object\n *\n * Represents a semantic version with comparison and validation capabilities.\n * Handles version ranges, pre-release versions, and semantic version operations.\n */\n\nimport semver from 'semver';\n\nexport class Version {\n private readonly value: string;\n private readonly semverInstance: semver.SemVer;\n\n private constructor(value: string, semverInstance: semver.SemVer) {\n this.value = value;\n this.semverInstance = semverInstance;\n }\n\n /**\n * Create a Version from a version string\n */\n public static fromString(versionString: string): Version {\n if (!versionString || versionString.trim().length === 0) {\n throw new Error('Version string cannot be empty');\n }\n\n const cleaned = versionString.trim();\n const parsedVersion = semver.parse(cleaned);\n\n if (!parsedVersion) {\n throw new Error(`Invalid version string: ${versionString}`);\n }\n\n return new Version(cleaned, parsedVersion);\n }\n\n /**\n * Create a Version from semver components\n */\n public static fromComponents(\n major: number,\n minor: number,\n patch: number,\n prerelease?: string\n ): Version {\n let versionString = `${major}.${minor}.${patch}`;\n if (prerelease) {\n versionString += `-${prerelease}`;\n }\n\n return Version.fromString(versionString);\n }\n\n /**\n * Parse a version that might include range operators\n */\n public static parseVersionRange(rangeString: string): VersionRange {\n return VersionRange.fromString(rangeString);\n }\n\n /**\n * Get the version string\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Get major version number\n */\n public getMajor(): number {\n return this.semverInstance.major;\n }\n\n /**\n * Get minor version number\n */\n public getMinor(): number {\n return this.semverInstance.minor;\n }\n\n /**\n * Get patch version number\n */\n public getPatch(): number {\n return this.semverInstance.patch;\n }\n\n /**\n * Get prerelease identifier\n */\n public getPrerelease(): string[] {\n return this.semverInstance.prerelease.map((p) => p.toString());\n }\n\n /**\n * Check if this is a prerelease version\n */\n public isPrerelease(): boolean {\n return this.semverInstance.prerelease.length > 0;\n }\n\n /**\n * Compare with another version\n */\n public compareTo(other: Version): number {\n return semver.compare(this.value, other.value);\n }\n\n /**\n * Check if this version is newer than another\n */\n public isNewerThan(other: Version): boolean {\n return this.compareTo(other) > 0;\n }\n\n /**\n * Check if this version is older than another\n */\n public isOlderThan(other: Version): boolean {\n return this.compareTo(other) < 0;\n }\n\n /**\n * Check if this version equals another\n */\n public equals(other: Version): boolean {\n return this.compareTo(other) === 0;\n }\n\n /**\n * Check if this version satisfies a range\n */\n public satisfies(range: VersionRange): boolean {\n return range.includes(this);\n }\n\n /**\n * Get the difference type compared to another version\n */\n public getDifferenceType(other: Version): 'major' | 'minor' | 'patch' | 'prerelease' | 'same' {\n if (this.equals(other)) {\n return 'same';\n }\n\n const diff = semver.diff(this.value, other.value);\n return diff as 'major' | 'minor' | 'patch' | 'prerelease';\n }\n\n /**\n * Increment version by type\n */\n public increment(type: 'major' | 'minor' | 'patch', prerelease?: string): Version {\n const incremented = semver.inc(this.value, type, prerelease);\n if (!incremented) {\n throw new Error(`Failed to increment version ${this.value} by ${type}`);\n }\n return Version.fromString(incremented);\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): Version {\n return Version.fromString(json);\n }\n}\n\n/**\n * Version Range Value Object\n *\n * Represents a version range (e.g., \"^1.2.3\", \"~2.0.0\", \">=1.0.0 <2.0.0\")\n */\nexport class VersionRange {\n private readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n /**\n * Create a VersionRange from a range string\n */\n public static fromString(rangeString: string): VersionRange {\n if (!rangeString || rangeString.trim().length === 0) {\n throw new Error('Version range string cannot be empty');\n }\n\n const cleaned = rangeString.trim();\n\n // Validate the range\n try {\n semver.validRange(cleaned);\n } catch (error) {\n throw new Error(`Invalid version range: ${rangeString}`);\n }\n\n if (!semver.validRange(cleaned)) {\n throw new Error(`Invalid version range: ${rangeString}`);\n }\n\n return new VersionRange(cleaned);\n }\n\n /**\n * Get the range string\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Check if a version satisfies this range\n */\n public includes(version: Version): boolean {\n return semver.satisfies(version.toString(), this.value);\n }\n\n /**\n * Check if this range is compatible with another range\n */\n public isCompatibleWith(other: VersionRange): boolean {\n // Check if ranges have any overlap\n try {\n return semver.intersects(this.value, other.value);\n } catch {\n return false;\n }\n }\n\n /**\n * Get the minimum version that satisfies this range\n */\n public getMinVersion(): Version | null {\n const minVersion = semver.minVersion(this.value);\n return minVersion ? Version.fromString(minVersion.version) : null;\n }\n\n /**\n * Get the maximum version that satisfies this range\n */\n public getMaxVersion(): Version | null {\n // semver doesn't have a direct maxVersion, so we approximate\n const minVer = this.getMinVersion();\n if (!minVer) return null;\n\n // For caret ranges (^1.2.3), max is < 2.0.0\n if (this.value.startsWith('^')) {\n const major = minVer.getMajor();\n return Version.fromComponents(major + 1, 0, 0);\n }\n\n // For tilde ranges (~1.2.3), max is < 1.3.0\n if (this.value.startsWith('~')) {\n const major = minVer.getMajor();\n const minor = minVer.getMinor();\n return Version.fromComponents(major, minor + 1, 0);\n }\n\n return null;\n }\n\n /**\n * Check if this is a caret range (^x.y.z)\n */\n public isCaret(): boolean {\n return this.value.startsWith('^');\n }\n\n /**\n * Check if this is a tilde range (~x.y.z)\n */\n public isTilde(): boolean {\n return this.value.startsWith('~');\n }\n\n /**\n * Check if this is an exact version\n */\n public isExact(): boolean {\n return (\n !this.value.includes('^') &&\n !this.value.includes('~') &&\n !this.value.includes('>') &&\n !this.value.includes('<') &&\n !this.value.includes('*') &&\n !this.value.includes('x')\n );\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): VersionRange {\n return VersionRange.fromString(json);\n }\n\n /**\n * Check equality with another VersionRange\n */\n public equals(other: VersionRange): boolean {\n return this.value === other.value;\n }\n}\n","/**\n * WorkspacePath Value Object\n *\n * Represents a file system path to a pnpm workspace.\n * This is an immutable value object that validates and normalizes workspace paths.\n */\n\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nexport class WorkspacePath {\n private readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n /**\n * Create a WorkspacePath from a string\n */\n public static fromString(pathString: string): WorkspacePath {\n if (!pathString || pathString.trim().length === 0) {\n throw new Error('WorkspacePath cannot be empty');\n }\n\n // Normalize the path\n const normalized = path.resolve(pathString.trim());\n\n return new WorkspacePath(normalized);\n }\n\n /**\n * Create a WorkspacePath from the current working directory\n */\n public static current(): WorkspacePath {\n return new WorkspacePath(process.cwd());\n }\n\n /**\n * Create a WorkspacePath from file URL (useful for ES modules)\n */\n public static fromFileURL(fileUrl: string): WorkspacePath {\n const filePath = fileURLToPath(fileUrl);\n const directory = path.dirname(filePath);\n return new WorkspacePath(directory);\n }\n\n /**\n * Get the absolute path as a string\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Get the directory name (last part of the path)\n */\n public getDirectoryName(): string {\n return path.basename(this.value);\n }\n\n /**\n * Join with another path segment\n */\n public join(...segments: string[]): WorkspacePath {\n const joined = path.join(this.value, ...segments);\n return new WorkspacePath(joined);\n }\n\n /**\n * Get the parent directory\n */\n public getParent(): WorkspacePath {\n const parent = path.dirname(this.value);\n return new WorkspacePath(parent);\n }\n\n /**\n * Check if this path is a subdirectory of another path\n */\n public isSubdirectoryOf(other: WorkspacePath): boolean {\n const relativePath = path.relative(other.value, this.value);\n return !relativePath.startsWith('..') && !path.isAbsolute(relativePath);\n }\n\n /**\n * Get relative path from another WorkspacePath\n */\n public relativeTo(other: WorkspacePath): string {\n return path.relative(other.value, this.value);\n }\n\n /**\n * Check equality with another WorkspacePath\n */\n public equals(other: WorkspacePath): boolean {\n return path.resolve(this.value) === path.resolve(other.value);\n }\n\n /**\n * Get the value for serialization\n */\n public getValue(): string {\n return this.value;\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): WorkspacePath {\n return WorkspacePath.fromString(json);\n }\n\n /**\n * Check if this path exists (requires async validation in infrastructure layer)\n */\n public async exists(): Promise<boolean> {\n try {\n const fs = await import('fs/promises');\n await fs.access(this.value);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Get the path to pnpm-workspace.yaml\n */\n public getPnpmWorkspaceConfigPath(): WorkspacePath {\n return this.join('pnpm-workspace.yaml');\n }\n\n /**\n * Get the path to package.json\n */\n public getPackageJsonPath(): WorkspacePath {\n return this.join('package.json');\n }\n}\n","/**\n * NPM/PNPM Configuration Parser\n *\n * Reads and parses .npmrc and .pnpmrc configuration files to extract registry settings\n * for different package scopes. Supports both npm and pnpm configuration formats.\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\nexport interface NpmrcConfig {\n // Default registry\n registry: string;\n // Scoped registries (e.g., @mycompany -> https://npm.mycompany.com)\n scopedRegistries: Map<string, string>;\n // Auth tokens for registries\n authTokens: Map<string, string>;\n // Other npm config values\n config: Map<string, string>;\n}\n\nexport class NpmrcParser {\n private static readonly DEFAULT_REGISTRY = 'https://registry.npmjs.org/';\n\n /**\n * Parse .npmrc/.pnpmrc configuration from multiple sources\n */\n static parse(\n workingDirectory: string = process.cwd(),\n includeGlobal: boolean = true\n ): NpmrcConfig {\n const config: NpmrcConfig = {\n registry: this.DEFAULT_REGISTRY,\n scopedRegistries: new Map(),\n authTokens: new Map(),\n config: new Map(),\n };\n\n // Load config files in order of precedence (later files override earlier)\n // Priority: project .pnpmrc > project .npmrc > global .pnpmrc > global .npmrc\n const configPaths: string[] = [];\n\n // Only include global configs if requested (for production use)\n if (includeGlobal) {\n configPaths.push(join(homedir(), '.npmrc')); // Global npmrc (lowest priority)\n configPaths.push(join(homedir(), '.pnpmrc')); // Global pnpmrc\n }\n\n configPaths.push(join(workingDirectory, '.npmrc')); // Project npmrc\n configPaths.push(join(workingDirectory, '.pnpmrc')); // Project pnpmrc (highest priority)\n\n for (const configPath of configPaths) {\n if (existsSync(configPath)) {\n this.parseFile(configPath, config);\n }\n }\n\n // Also check for environment variables (skip in tests if includeGlobal is false)\n this.parseEnvironment(config, includeGlobal);\n\n return config;\n }\n\n /**\n * Parse a single .npmrc file\n */\n private static parseFile(filepath: string, config: NpmrcConfig): void {\n try {\n const content = readFileSync(filepath, 'utf-8');\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n // Skip comments and empty lines\n if (!trimmedLine || trimmedLine.startsWith('#') || trimmedLine.startsWith(';')) {\n continue;\n }\n\n // Parse key=value pairs\n const separatorIndex = trimmedLine.indexOf('=');\n if (separatorIndex === -1) continue;\n\n const key = trimmedLine.substring(0, separatorIndex).trim();\n const value = trimmedLine.substring(separatorIndex + 1).trim();\n\n // Handle scoped registries (e.g., @mycompany:registry=https://npm.mycompany.com/)\n if (key.includes(':registry')) {\n const scope = key.replace(':registry', '');\n config.scopedRegistries.set(scope, this.normalizeRegistryUrl(value));\n }\n // Handle default registry\n else if (key === 'registry') {\n config.registry = this.normalizeRegistryUrl(value);\n }\n // Handle auth tokens (e.g., //registry.npmjs.org/:_authToken=...)\n else if (key.includes(':_authToken') || key.includes('_authToken')) {\n // Extract registry URL from the key\n const match = key.match(/\\/\\/(.*?)\\/:/);\n if (match && match[1]) {\n const registryHost = match[1];\n config.authTokens.set(registryHost, value);\n }\n }\n // Store other config values\n else {\n config.config.set(key, value);\n }\n }\n } catch (error) {\n // Silently ignore errors reading npmrc files\n console.debug(`Failed to parse npmrc file ${filepath}:`, error);\n }\n }\n\n /**\n * Parse npm configuration from environment variables\n */\n private static parseEnvironment(config: NpmrcConfig, includeEnv: boolean = true): void {\n if (!includeEnv) {\n return; // Skip environment parsing in tests\n }\n\n // Check for npm_config_registry\n if (process.env.npm_config_registry) {\n config.registry = this.normalizeRegistryUrl(process.env.npm_config_registry);\n }\n\n // Check for scoped registries in environment\n for (const [key, value] of Object.entries(process.env)) {\n if (key.startsWith('npm_config_') && key.includes('_registry')) {\n // Extract scope from environment variable name\n // e.g., npm_config_@mycompany_registry -> @mycompany\n const match = key.match(/npm_config_(.+)_registry/);\n if (match && match[1] && value) {\n const scope = match[1].replace(/_/g, '/').replace(/\\//, '@');\n config.scopedRegistries.set(scope, this.normalizeRegistryUrl(value));\n }\n }\n }\n }\n\n /**\n * Get the appropriate registry URL for a package\n */\n static getRegistryForPackage(packageName: string, config: NpmrcConfig): string {\n // Check if package has a scope (e.g., @mycompany/package)\n if (packageName.startsWith('@')) {\n const scopeEnd = packageName.indexOf('/');\n if (scopeEnd !== -1) {\n const scope = packageName.substring(0, scopeEnd);\n\n // Check if we have a scoped registry for this scope\n const scopedRegistry = config.scopedRegistries.get(scope);\n if (scopedRegistry) {\n return scopedRegistry;\n }\n }\n }\n\n // Fall back to default registry\n return config.registry;\n }\n\n /**\n * Normalize registry URL to ensure it has a trailing slash\n */\n private static normalizeRegistryUrl(url: string): string {\n // Remove any quotes that might be in the config\n url = url.replace(/^[\"']|[\"']$/g, '');\n\n // Ensure trailing slash\n if (!url.endsWith('/')) {\n url += '/';\n }\n\n return url;\n }\n\n /**\n * Get auth token for a registry\n */\n static getAuthToken(registryUrl: string, config: NpmrcConfig): string | undefined {\n try {\n const url = new URL(registryUrl);\n return config.authTokens.get(url.hostname);\n } catch {\n return undefined;\n }\n }\n}\n","/**\n * NPM Registry Service\n *\n * Provides access to NPM registry for package version information.\n * Handles API calls, caching, and version resolution.\n */\n\nimport npmRegistryFetch from 'npm-registry-fetch';\nimport pacote from 'pacote';\nimport semver from 'semver';\n\nimport { AdvancedConfig, UserFriendlyErrorHandler } from '@pcu/utils';\nimport { Version, VersionRange } from '../../domain/value-objects/version.js';\nimport { NpmrcConfig, NpmrcParser } from '../utils/npmrcParser.js';\n\nexport interface PackageInfo {\n name: string;\n description?: string;\n homepage?: string;\n repository?: {\n type?: string;\n url?: string;\n directory?: string;\n };\n license?: string;\n author?: string | { name: string; email?: string };\n maintainers?: Array<{ name: string; email?: string }>;\n keywords?: string[];\n versions: string[];\n latestVersion: string;\n tags: Record<string, string>;\n time?: Record<string, string>;\n}\n\nexport interface SecurityVulnerability {\n id: string;\n title: string;\n severity: 'low' | 'moderate' | 'high' | 'critical';\n description: string;\n reference: string;\n vulnerable_versions: string;\n patched_versions?: string;\n recommendation?: string;\n}\n\nexport interface SecurityReport {\n package: string;\n version: string;\n vulnerabilities: SecurityVulnerability[];\n hasVulnerabilities: boolean;\n}\n\nexport class NpmRegistryService {\n private readonly cache: Map<string, { data: any; timestamp: number }> = new Map();\n\n // Differentiated cache timeouts for different data types\n private readonly versionCacheTimeout: number;\n private readonly packageInfoCacheTimeout: number;\n private readonly securityCacheTimeout: number;\n\n // Advanced configuration with defaults\n private readonly concurrency: number;\n private readonly timeout: number;\n private readonly retries: number;\n private readonly cachingEnabled: boolean;\n\n // NPM configuration for handling multiple registries\n private readonly npmrcConfig: NpmrcConfig;\n\n constructor(\n registryUrl: string = 'https://registry.npmjs.org/',\n options: AdvancedConfig = {},\n workingDirectory: string = process.cwd()\n ) {\n // Parse npmrc configuration for scoped registries\n this.npmrcConfig = NpmrcParser.parse(workingDirectory);\n\n // Override default registry if specified in npmrc\n if (!registryUrl || registryUrl === 'https://registry.npmjs.org/') {\n // Use npmrc registry as default if no specific registry is provided\n const normalizedUrl = registryUrl.endsWith('/') ? registryUrl : registryUrl + '/';\n this.npmrcConfig.registry = this.npmrcConfig.registry || normalizedUrl;\n } else {\n // Use the provided registry URL as override\n this.npmrcConfig.registry = registryUrl.endsWith('/') ? registryUrl : registryUrl + '/';\n }\n this.concurrency = options.concurrency ?? 8; // Increased from 5 to match NCU performance\n this.timeout = options.timeout ?? 15000; // Reduced from 30s to 15s for faster failure detection\n this.retries = options.retries ?? 2; // Reduced from 3 to 2 for faster overall performance\n\n // Optimized cache timeouts for different data types\n const baseCacheMinutes = options.cacheValidityMinutes ?? 10; // Reduced from 60 to 10 minutes\n this.versionCacheTimeout = baseCacheMinutes * 60 * 1000; // Version info: 10 minutes (frequently checked)\n this.packageInfoCacheTimeout = baseCacheMinutes * 2 * 60 * 1000; // Package info: 20 minutes\n this.securityCacheTimeout = baseCacheMinutes * 6 * 60 * 1000; // Security info: 60 minutes (changes less frequently)\n\n this.cachingEnabled = baseCacheMinutes > 0; // Disable caching if set to 0\n }\n\n /**\n * Execute a function with retry logic\n */\n private async executeWithRetry<T>(\n fn: () => Promise<T>,\n context: string = 'operation'\n ): Promise<T> {\n let lastError: Error;\n\n for (let attempt = 1; attempt <= this.retries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (attempt === this.retries) {\n throw new Error(`${context} failed after ${this.retries} attempts: ${lastError.message}`);\n }\n\n // Exponential backoff: wait 1s, 2s, 4s, etc.\n const delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);\n await new Promise((resolve) => setTimeout(resolve, delay));\n\n // Extract package name from context for better error handling\n const packageName = context.includes('for ')\n ? context.split('for ')[1] || 'unknown package'\n : 'unknown package';\n\n UserFriendlyErrorHandler.handleRetryAttempt(packageName, attempt, this.retries, lastError);\n }\n }\n\n throw lastError!;\n }\n\n /**\n * Get the appropriate registry URL for a package\n */\n private getRegistryForPackage(packageName: string): string {\n return NpmrcParser.getRegistryForPackage(packageName, this.npmrcConfig);\n }\n\n /**\n * Get auth configuration for a registry\n */\n private getAuthConfig(registryUrl: string): Record<string, any> {\n const authToken = NpmrcParser.getAuthToken(registryUrl, this.npmrcConfig);\n if (authToken) {\n return {\n '//registry.npmjs.org/:_authToken': authToken,\n token: authToken,\n };\n }\n return {};\n }\n\n /**\n * Get lightweight package version information (optimized for performance)\n */\n async getPackageVersions(packageName: string): Promise<{\n name: string;\n versions: string[];\n latestVersion: string;\n tags: Record<string, string>;\n time?: Record<string, string>;\n }> {\n const registryUrl = this.getRegistryForPackage(packageName);\n const cacheKey = `package-versions:${registryUrl}:${packageName}`;\n\n // Check cache first if caching is enabled\n if (this.cachingEnabled) {\n const cached = this.getFromCache(cacheKey);\n if (cached) {\n return cached;\n }\n }\n\n const packageVersions = await this.executeWithRetry(async () => {\n // Use lightweight packument call without fullMetadata\n const authConfig = this.getAuthConfig(registryUrl);\n const packument = await pacote.packument(packageName, {\n registry: registryUrl,\n timeout: this.timeout,\n fullMetadata: false, // Key optimization: don't fetch full metadata\n ...authConfig,\n });\n\n const versions = Object.keys(packument.versions || {}).sort(semver.rcompare);\n const latestVersion = packument['dist-tags']?.latest || versions[0] || '';\n\n return {\n name: packument.name,\n versions,\n latestVersion,\n tags: packument['dist-tags'] || {},\n time: (packument as any).time || {}, // Still include time for newest versions feature\n };\n }, `Fetching package versions for ${packageName}`);\n\n // Cache the result if caching is enabled\n if (this.cachingEnabled) {\n this.setCache(cacheKey, packageVersions);\n }\n\n return packageVersions;\n }\n\n /**\n * Get package information including all versions\n * @deprecated Use getPackageVersions() for better performance\n */\n async getPackageInfo(packageName: string): Promise<PackageInfo> {\n const registryUrl = this.getRegistryForPackage(packageName);\n const cacheKey = `package-info:${registryUrl}:${packageName}`;\n\n // Check cache first if caching is enabled\n if (this.cachingEnabled) {\n const cached = this.getFromCache(cacheKey);\n if (cached) {\n return cached;\n }\n }\n\n // Use lightweight version and extend with additional metadata only if needed\n const versionInfo = await this.getPackageVersions(packageName);\n\n const packageInfo = await this.executeWithRetry(async () => {\n // Only fetch full metadata if we actually need the extended info\n const authConfig = this.getAuthConfig(registryUrl);\n const packument = await pacote.packument(packageName, {\n registry: registryUrl,\n timeout: this.timeout,\n fullMetadata: true,\n ...authConfig,\n });\n\n return {\n name: versionInfo.name,\n description: (packument as any).description || undefined,\n homepage: (packument as any).homepage || undefined,\n repository: (packument as any).repository || undefined,\n license: (packument as any).license || undefined,\n author: (packument as any).author || undefined,\n maintainers: (packument as any).maintainers || undefined,\n keywords: (packument as any).keywords || undefined,\n versions: versionInfo.versions,\n latestVersion: versionInfo.latestVersion,\n tags: versionInfo.tags,\n time: versionInfo.time || {},\n };\n }, `Fetching package info for ${packageName}`);\n\n // Cache the result if caching is enabled\n if (this.cachingEnabled) {\n this.setCache(cacheKey, packageInfo);\n }\n\n return packageInfo;\n }\n\n /**\n * Get the latest version of a package\n */\n async getLatestVersion(packageName: string): Promise<Version> {\n try {\n const versionInfo = await this.getPackageVersions(packageName);\n return Version.fromString(versionInfo.latestVersion);\n } catch (error) {\n throw new Error(`Failed to get latest version for ${packageName}: ${error}`);\n }\n }\n\n /**\n * Get the greatest version that satisfies a range\n */\n async getGreatestVersion(packageName: string, range?: VersionRange): Promise<Version> {\n try {\n const versionInfo = await this.getPackageVersions(packageName);\n\n if (!range) {\n return Version.fromString(versionInfo.latestVersion);\n }\n\n // Find the greatest version that satisfies the range\n const satisfyingVersions = versionInfo.versions.filter((v) => {\n try {\n const version = Version.fromString(v);\n return version.satisfies(range);\n } catch {\n return false;\n }\n });\n\n if (satisfyingVersions.length === 0) {\n throw new Error(`No versions satisfy range ${range.toString()}`);\n }\n\n // Return the first (greatest) version\n if (!satisfyingVersions[0]) {\n throw new Error(`No satisfying versions found for ${packageName}`);\n }\n return Version.fromString(satisfyingVersions[0]);\n } catch (error) {\n throw new Error(`Failed to get greatest version for ${packageName}: ${error}`);\n }\n }\n\n /**\n * Get versions by date (newest versions published)\n */\n async getNewestVersions(packageName: string, count: number = 10): Promise<Version[]> {\n try {\n const versionInfo = await this.getPackageVersions(packageName);\n\n // Sort versions by publication time\n const versionsWithTime = versionInfo.versions\n .map((version) => ({\n version,\n time: versionInfo.time?.[version] ? new Date(versionInfo.time[version]) : new Date(0),\n }))\n .sort((a, b) => b.time.getTime() - a.time.getTime())\n .slice(0, count);\n\n return versionsWithTime.map((item) => Version.fromString(item.version));\n } catch (error) {\n throw new Error(`Failed to get newest versions for ${packageName}: ${error}`);\n }\n }\n\n /**\n * Check for security vulnerabilities\n */\n async checkSecurityVulnerabilities(\n packageName: string,\n version: string\n ): Promise<SecurityReport> {\n const registryUrl = this.getRegistryForPackage(packageName);\n const cacheKey = `security:${registryUrl}:${packageName}@${version}`;\n\n // Check cache first\n const cached = this.getFromCache(cacheKey);\n if (cached) {\n return cached;\n }\n\n try {\n // Use npm audit API\n const auditData = {\n name: packageName,\n version: version,\n requires: {},\n dependencies: {},\n };\n\n const authConfig = this.getAuthConfig(registryUrl);\n const response = await npmRegistryFetch('/-/npm/v1/security/audits', {\n method: 'POST',\n body: JSON.stringify(auditData),\n headers: {\n 'Content-Type': 'application/json',\n },\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n });\n\n const auditResult = await response.json();\n const vulnerabilities: SecurityVulnerability[] = [];\n\n // Parse audit results\n if (auditResult.advisories) {\n for (const advisory of Object.values(auditResult.advisories) as any[]) {\n vulnerabilities.push({\n id: advisory.id.toString(),\n title: advisory.title,\n severity: advisory.severity,\n description: advisory.overview,\n reference: advisory.url,\n vulnerable_versions: advisory.vulnerable_versions,\n patched_versions: advisory.patched_versions,\n recommendation: advisory.recommendation,\n });\n }\n }\n\n const securityReport: SecurityReport = {\n package: packageName,\n version: version,\n vulnerabilities,\n hasVulnerabilities: vulnerabilities.length > 0,\n };\n\n // Cache the result\n this.setCache(cacheKey, securityReport);\n\n return securityReport;\n } catch (error) {\n // If security check fails, return empty report\n UserFriendlyErrorHandler.handleSecurityCheckFailure(packageName, error as Error);\n\n const emptyReport: SecurityReport = {\n package: packageName,\n version: version,\n vulnerabilities: [],\n hasVulnerabilities: false,\n };\n\n return emptyReport;\n }\n }\n\n /**\n * Batch query multiple packages with progress tracking\n */\n async batchQueryVersions(\n packages: string[],\n progressCallback?: (completed: number, total: number, currentPackage: string) => void\n ): Promise<Map<string, PackageInfo>> {\n const results = new Map<string, PackageInfo>();\n let completed = 0;\n const total = packages.length;\n\n // Process packages in parallel with configurable concurrency\n const chunks = this.chunkArray(packages, this.concurrency);\n\n for (const chunk of chunks) {\n const promises = chunk.map(async (packageName) => {\n try {\n const info = await this.getPackageInfo(packageName);\n results.set(packageName, info);\n\n // Update progress\n completed++;\n if (progressCallback) {\n progressCallback(completed, total, packageName);\n }\n } catch (error) {\n // Still count failed packages in progress\n completed++;\n if (progressCallback) {\n progressCallback(completed, total, packageName);\n }\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error);\n }\n });\n\n await Promise.all(promises);\n }\n\n return results;\n }\n\n /**\n * Check if package author has changed\n */\n async hasPackageAuthorChanged(\n packageName: string,\n fromVersion: string,\n toVersion: string\n ): Promise<boolean> {\n try {\n // const packageInfo = await this.getPackageInfo(packageName);\n\n const registryUrl = this.getRegistryForPackage(packageName);\n const authConfig = this.getAuthConfig(registryUrl);\n\n const fromVersionData = await pacote.manifest(`${packageName}@${fromVersion}`, {\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n });\n\n const toVersionData = await pacote.manifest(`${packageName}@${toVersion}`, {\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n });\n\n // Compare authors/maintainers\n const fromAuthor = this.normalizeAuthor((fromVersionData as any).author);\n const toAuthor = this.normalizeAuthor((toVersionData as any).author);\n\n return fromAuthor !== toAuthor;\n } catch (error) {\n // Log for debugging, don't show to user as this is not critical\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'author-check',\n });\n return false;\n }\n }\n\n /**\n * Get package download statistics\n */\n async getDownloadStats(\n packageName: string,\n period: 'last-day' | 'last-week' | 'last-month' = 'last-week'\n ): Promise<number> {\n try {\n const response = await fetch(\n `https://api.npmjs.org/downloads/point/${period}/${packageName}`\n );\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as any;\n return data.downloads || 0;\n } catch (error) {\n // Log for debugging, don't show to user as this is not critical\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'download-stats',\n });\n return 0;\n }\n }\n\n /**\n * Clear all cache\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Clear cache by type\n */\n clearCacheByType(type: 'versions' | 'package-info' | 'security' | 'all' = 'all'): void {\n if (type === 'all') {\n this.clearCache();\n return;\n }\n\n const prefix =\n type === 'versions'\n ? 'package-versions:'\n : type === 'package-info'\n ? 'package-info:'\n : 'security:';\n\n const keysToDelete: string[] = [];\n for (const key of this.cache.keys()) {\n if (key.startsWith(prefix)) {\n keysToDelete.push(key);\n }\n }\n\n keysToDelete.forEach((key) => this.cache.delete(key));\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats(): {\n total: number;\n versions: number;\n packageInfo: number;\n security: number;\n expired: number;\n } {\n const stats = { total: 0, versions: 0, packageInfo: 0, security: 0, expired: 0 };\n const now = Date.now();\n\n for (const [key, cached] of this.cache.entries()) {\n stats.total++;\n\n const timeout = this.getCacheTimeout(key);\n if (now - cached.timestamp > timeout) {\n stats.expired++;\n continue;\n }\n\n if (key.startsWith('package-versions:')) {\n stats.versions++;\n } else if (key.startsWith('package-info:')) {\n stats.packageInfo++;\n } else if (key.startsWith('security:')) {\n stats.security++;\n }\n }\n\n return stats;\n }\n\n /**\n * Get item from cache if not expired\n */\n private getFromCache(key: string): any | null {\n const cached = this.cache.get(key);\n if (!cached) {\n return null;\n }\n\n // Determine timeout based on cache key type\n const timeout = this.getCacheTimeout(key);\n\n if (Date.now() - cached.timestamp > timeout) {\n this.cache.delete(key);\n return null;\n }\n\n return cached.data;\n }\n\n /**\n * Get appropriate cache timeout based on key type\n */\n private getCacheTimeout(key: string): number {\n if (key.startsWith('package-versions:')) {\n return this.versionCacheTimeout;\n } else if (key.startsWith('security:')) {\n return this.securityCacheTimeout;\n } else if (key.startsWith('package-info:')) {\n return this.packageInfoCacheTimeout;\n }\n\n // Default to version cache timeout for unknown keys\n return this.versionCacheTimeout;\n }\n\n /**\n * Set item in cache\n */\n private setCache(key: string, data: any): void {\n this.cache.set(key, {\n data,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Split array into chunks\n */\n private chunkArray<T>(array: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size));\n }\n return chunks;\n }\n\n /**\n * Normalize author for comparison\n */\n private normalizeAuthor(author: any): string {\n if (typeof author === 'string') {\n return author.toLowerCase().trim();\n }\n if (typeof author === 'object' && author?.name) {\n return author.name.toLowerCase().trim();\n }\n return '';\n }\n}\n","/**\n * Catalog Update Service\n *\n * Core application service that handles catalog dependency updates.\n * Orchestrates domain objects and infrastructure services to provide\n * high-level use cases for checking and updating catalog dependencies.\n */\n\nimport { AdvancedConfig, ConfigLoader, UserFriendlyErrorHandler } from '@pcu/utils';\nimport { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js';\nimport { Version, VersionRange } from '../../domain/value-objects/version.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\nimport { NpmRegistryService } from '../../infrastructure/external-services/npmRegistryService.js';\nimport { ProgressReporter } from '../interfaces/progressReporter.js';\n\nexport interface CheckOptions {\n workspacePath?: string | undefined;\n catalogName?: string | undefined;\n target?: UpdateTarget | undefined;\n includePrerelease?: boolean | undefined;\n exclude?: string[] | undefined;\n include?: string[] | undefined;\n progressReporter?: ProgressReporter | null;\n}\n\nexport interface UpdateOptions extends CheckOptions {\n interactive?: boolean;\n dryRun?: boolean;\n force?: boolean;\n createBackup?: boolean;\n}\n\nexport interface OutdatedReport {\n workspace: {\n path: string;\n name: string;\n };\n catalogs: CatalogUpdateInfo[];\n totalOutdated: number;\n hasUpdates: boolean;\n}\n\nexport interface CatalogUpdateInfo {\n catalogName: string;\n outdatedDependencies: OutdatedDependencyInfo[];\n totalPackages: number;\n outdatedCount: number;\n}\n\nexport interface OutdatedDependencyInfo {\n packageName: string;\n currentVersion: string;\n latestVersion: string;\n wantedVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n isSecurityUpdate: boolean;\n affectedPackages: string[];\n}\n\nexport interface UpdatePlan {\n workspace: {\n path: string;\n name: string;\n };\n updates: PlannedUpdate[];\n conflicts: VersionConflict[];\n totalUpdates: number;\n hasConflicts: boolean;\n}\n\nexport interface PlannedUpdate {\n catalogName: string;\n packageName: string;\n currentVersion: string;\n newVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n reason: string;\n affectedPackages: string[];\n requireConfirmation?: boolean;\n autoUpdate?: boolean;\n groupUpdate?: boolean;\n}\n\nexport interface VersionConflict {\n packageName: string;\n catalogs: Array<{\n catalogName: string;\n currentVersion: string;\n proposedVersion: string;\n }>;\n recommendation: string;\n}\n\nexport interface UpdateResult {\n success: boolean;\n workspace: {\n path: string;\n name: string;\n };\n updatedDependencies: UpdatedDependency[];\n skippedDependencies: SkippedDependency[];\n errors: UpdateError[];\n totalUpdated: number;\n totalSkipped: number;\n totalErrors: number;\n}\n\nexport interface UpdatedDependency {\n catalogName: string;\n packageName: string;\n fromVersion: string;\n toVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n}\n\nexport interface SkippedDependency {\n catalogName: string;\n packageName: string;\n currentVersion: string;\n reason: string;\n}\n\nexport interface UpdateError {\n catalogName: string;\n packageName: string;\n error: string;\n fatal: boolean;\n}\n\nexport interface ImpactAnalysis {\n packageName: string;\n catalogName: string;\n currentVersion: string;\n proposedVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n affectedPackages: PackageImpact[];\n riskLevel: 'low' | 'medium' | 'high';\n securityImpact: SecurityImpact;\n recommendations: string[];\n}\n\nexport interface PackageImpact {\n packageName: string;\n packagePath: string;\n dependencyType: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies';\n isBreakingChange: boolean;\n compatibilityRisk: 'low' | 'medium' | 'high';\n}\n\nexport interface SecurityImpact {\n hasVulnerabilities: boolean;\n fixedVulnerabilities: number;\n newVulnerabilities: number;\n severityChange: 'better' | 'worse' | 'same';\n}\n\nexport type UpdateTarget = 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n\nexport class CatalogUpdateService {\n constructor(\n private readonly workspaceRepository: WorkspaceRepository,\n private readonly registryService: NpmRegistryService\n ) {}\n\n /**\n * Create a new CatalogUpdateService with advanced configuration\n */\n static createWithConfig(\n workspaceRepository: WorkspaceRepository,\n workspacePath?: string\n ): CatalogUpdateService {\n const config = ConfigLoader.loadConfig(workspacePath || process.cwd());\n\n // Create registry service with advanced configuration\n const advancedConfig: AdvancedConfig = {};\n\n if (config.advanced?.concurrency !== undefined) {\n advancedConfig.concurrency = config.advanced.concurrency;\n }\n if (config.advanced?.timeout !== undefined) {\n advancedConfig.timeout = config.advanced.timeout;\n }\n if (config.advanced?.retries !== undefined) {\n advancedConfig.retries = config.advanced.retries;\n }\n if (config.advanced?.cacheValidityMinutes !== undefined) {\n advancedConfig.cacheValidityMinutes = config.advanced.cacheValidityMinutes;\n }\n\n // Use default registry for now, npmrc will handle scoped registries\n const registryUrl = 'https://registry.npmjs.org/';\n const workingDirectory = workspacePath || process.cwd();\n\n const registryService = new NpmRegistryService(registryUrl, advancedConfig, workingDirectory);\n\n return new CatalogUpdateService(workspaceRepository, registryService);\n }\n\n /**\n * Check for outdated catalog dependencies\n */\n async checkOutdatedDependencies(options: CheckOptions = {}): Promise<OutdatedReport> {\n const workspacePath = WorkspacePath.fromString(options.workspacePath || process.cwd());\n\n // Load configuration\n const config = ConfigLoader.loadConfig(workspacePath.toString());\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(workspacePath);\n if (!workspace) {\n throw new Error(`No pnpm workspace found at ${workspacePath.toString()}`);\n }\n\n const catalogs = workspace.getCatalogs();\n const catalogInfos: CatalogUpdateInfo[] = [];\n let totalOutdated = 0;\n\n // Filter catalogs if specific catalog requested\n const catalogsToCheck = options.catalogName\n ? [catalogs.get(options.catalogName)].filter(Boolean)\n : catalogs.getAll();\n\n if (catalogsToCheck.length === 0) {\n throw new Error(\n options.catalogName\n ? `Catalog \"${options.catalogName}\" not found`\n : 'No catalogs found in workspace'\n );\n }\n\n // Calculate total packages across all catalogs\n let totalPackages = 0;\n const allPackagesToCheck: Array<[string, any, any]> = [];\n\n for (const catalog of catalogsToCheck) {\n if (!catalog) continue;\n const dependencies = catalog.getDependencies();\n const packageArray = Array.from(dependencies);\n\n const packagesToCheck = packageArray.filter(([packageName]) => {\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config);\n return packageConfig.shouldUpdate;\n });\n\n // Add catalog info to each package for processing\n packagesToCheck.forEach(([packageName, range]) => {\n allPackagesToCheck.push([packageName, range, catalog]);\n });\n\n totalPackages += packagesToCheck.length;\n }\n\n // Create a single progress bar for all catalogs\n let progressReporter: ProgressReporter | null = null;\n if (totalPackages > 0 && options.progressReporter) {\n progressReporter = options.progressReporter;\n progressReporter.start(`正在检查 ${totalPackages} 个依赖包...`, totalPackages);\n }\n\n let completed = 0;\n\n // Check each catalog for outdated dependencies\n for (const catalog of catalogsToCheck) {\n if (!catalog) {\n throw new Error(`Catalog \"${catalogsToCheck[0]?.getName() || 'unknown'}\" not found`);\n }\n const dependencies = catalog.getDependencies();\n\n // Convert to array for parallel processing\n const packageArray = Array.from(dependencies);\n\n // Filter packages that should be updated based on configuration\n const packagesToCheck = packageArray.filter(([packageName]) => {\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config);\n return packageConfig.shouldUpdate;\n });\n\n // Process packages in parallel with concurrency control (pass progress info)\n const outdatedDependencies = await this.processPackagesInParallel(\n packagesToCheck,\n catalog,\n workspace,\n config,\n options,\n progressReporter,\n completed,\n totalPackages\n );\n\n // Update completed count\n completed += packagesToCheck.length;\n\n const catalogInfo: CatalogUpdateInfo = {\n catalogName: catalog!.getName(),\n outdatedDependencies,\n totalPackages: dependencies.size,\n outdatedCount: outdatedDependencies.length,\n };\n\n catalogInfos.push(catalogInfo);\n totalOutdated += outdatedDependencies.length;\n }\n\n // Complete the progress bar\n if (progressReporter) {\n if (totalOutdated > 0) {\n progressReporter.success(`✅ 检查完成! 发现 ${totalOutdated} 个可更新的依赖包`);\n } else {\n progressReporter.success('✅ 检查完成! 所有依赖包都是最新的');\n }\n }\n\n return {\n workspace: {\n path: workspacePath.toString(),\n name: workspacePath.getDirectoryName(),\n },\n catalogs: catalogInfos,\n totalOutdated,\n hasUpdates: totalOutdated > 0,\n };\n }\n\n /**\n * Plan catalog dependency updates\n */\n async planUpdates(options: UpdateOptions): Promise<UpdatePlan> {\n const outdatedReport = await this.checkOutdatedDependencies(options);\n\n const updates: PlannedUpdate[] = [];\n const conflicts: VersionConflict[] = [];\n\n // Load configuration for package rules and monorepo settings\n const workspacePath = options.workspacePath || process.cwd();\n const config = ConfigLoader.loadConfig(workspacePath);\n\n // Convert outdated dependencies to planned updates\n for (const catalogInfo of outdatedReport.catalogs) {\n for (const outdated of catalogInfo.outdatedDependencies) {\n // Get package-specific configuration\n const packageConfig = ConfigLoader.getPackageConfig(outdated.packageName, config);\n\n const update: PlannedUpdate = {\n catalogName: catalogInfo.catalogName,\n packageName: outdated.packageName,\n currentVersion: outdated.currentVersion,\n newVersion: outdated.latestVersion,\n updateType: outdated.updateType,\n reason: this.getUpdateReason(outdated),\n affectedPackages: outdated.affectedPackages,\n requireConfirmation: packageConfig.requireConfirmation,\n autoUpdate: packageConfig.autoUpdate,\n groupUpdate: packageConfig.groupUpdate,\n };\n\n updates.push(update);\n }\n }\n\n // Handle syncVersions - ensure packages in syncVersions list are synchronized across catalogs\n if (config.monorepo?.syncVersions && config.monorepo.syncVersions.length > 0) {\n const workspacePathObj = WorkspacePath.fromString(workspacePath);\n const workspace = await this.workspaceRepository.findByPath(workspacePathObj);\n\n if (workspace) {\n updates.push(\n ...(await this.createSyncVersionUpdates(config.monorepo.syncVersions, workspace, updates))\n );\n }\n }\n\n // Detect conflicts (same package in multiple catalogs with different versions)\n const packageCatalogMap = new Map<string, PlannedUpdate[]>();\n\n for (const update of updates) {\n if (!packageCatalogMap.has(update.packageName)) {\n packageCatalogMap.set(update.packageName, []);\n }\n packageCatalogMap.get(update.packageName)!.push(update);\n }\n\n // Handle conflicts with catalogPriority\n for (const [packageName, packageUpdates] of packageCatalogMap) {\n if (packageUpdates.length > 1) {\n const uniqueVersions = new Set(packageUpdates.map((u) => u.newVersion));\n if (uniqueVersions.size > 1) {\n const resolvedConflict = this.resolveVersionConflict(\n packageName,\n packageUpdates,\n config.monorepo?.catalogPriority || ['default']\n );\n\n if (resolvedConflict) {\n conflicts.push(resolvedConflict);\n }\n }\n }\n }\n\n return {\n workspace: outdatedReport.workspace,\n updates,\n conflicts,\n totalUpdates: updates.length,\n hasConflicts: conflicts.length > 0,\n };\n }\n\n /**\n * Execute catalog dependency updates\n */\n async executeUpdates(plan: UpdatePlan, options: UpdateOptions): Promise<UpdateResult> {\n const workspacePath = WorkspacePath.fromString(plan.workspace.path);\n\n // Load configuration for security settings\n const config = ConfigLoader.loadConfig(workspacePath.toString());\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(workspacePath);\n if (!workspace) {\n throw new Error(`Workspace not found at ${workspacePath.toString()}`);\n }\n\n const updatedDependencies: UpdatedDependency[] = [];\n const skippedDependencies: SkippedDependency[] = [];\n const errors: UpdateError[] = [];\n\n // Track security updates for notification\n const securityUpdates: string[] = [];\n\n // Execute updates\n for (const update of plan.updates) {\n try {\n // Skip if conflicts exist and force is not enabled\n if (plan.hasConflicts && !options.force) {\n const hasConflict = plan.conflicts.some((c) => c.packageName === update.packageName);\n if (hasConflict) {\n skippedDependencies.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n currentVersion: update.currentVersion,\n reason: 'Version conflict - use --force to override',\n });\n continue;\n }\n }\n\n // Check if this is a security update and track it\n let isSecurityUpdate = false;\n if (config.security?.notifyOnSecurityUpdate) {\n try {\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n update.packageName,\n update.currentVersion\n );\n if (securityReport.hasVulnerabilities) {\n isSecurityUpdate = true;\n securityUpdates.push(\n `${update.packageName}@${update.currentVersion} → ${update.newVersion}`\n );\n }\n } catch (error) {\n UserFriendlyErrorHandler.handleSecurityCheckFailure(\n update.packageName,\n error as Error,\n { operation: 'update' }\n );\n }\n }\n\n // Perform the update\n workspace.updateCatalogDependency(\n update.catalogName,\n update.packageName,\n update.newVersion\n );\n\n updatedDependencies.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n fromVersion: update.currentVersion,\n toVersion: update.newVersion,\n updateType: update.updateType,\n });\n\n // Log security update notification\n if (isSecurityUpdate && config.security?.notifyOnSecurityUpdate) {\n console.log(\n `✅ Security fix applied: ${update.packageName}@${update.currentVersion} → ${update.newVersion}`\n );\n }\n } catch (error) {\n errors.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n error: String(error),\n fatal: false,\n });\n }\n }\n\n // Save workspace if not in dry-run mode\n if (!options.dryRun && updatedDependencies.length > 0) {\n try {\n await this.workspaceRepository.save(workspace);\n\n // Show summary of security updates if any\n if (securityUpdates.length > 0 && config.security?.notifyOnSecurityUpdate) {\n console.log(`\\n🔒 Security Updates Summary:`);\n console.log(` Applied ${securityUpdates.length} security fix(es):`);\n securityUpdates.forEach((update) => console.log(` • ${update}`));\n }\n\n // Show summary of synced version updates\n const syncUpdates = updatedDependencies.filter((u) =>\n plan.updates.find(\n (pu) =>\n pu.packageName === u.packageName &&\n pu.catalogName === u.catalogName &&\n pu.reason.includes('Sync version')\n )\n );\n\n if (syncUpdates.length > 0) {\n console.log(`\\n🔄 Version Sync Summary:`);\n const syncedPackages = new Set(syncUpdates.map((u) => u.packageName));\n console.log(` Synchronized ${syncedPackages.size} package(s) across catalogs:`);\n\n // Group by package name\n const syncByPackage = new Map<string, typeof syncUpdates>();\n syncUpdates.forEach((update) => {\n if (!syncByPackage.has(update.packageName)) {\n syncByPackage.set(update.packageName, []);\n }\n syncByPackage.get(update.packageName)!.push(update);\n });\n\n syncByPackage.forEach((updates, packageName) => {\n const catalogs = updates.map((u) => u.catalogName).join(', ');\n const version = updates[0]?.toVersion;\n console.log(` • ${packageName}@${version} in catalogs: ${catalogs}`);\n });\n }\n\n // Show catalog priority resolution if any\n if (\n plan.hasConflicts &&\n plan.conflicts.some((c) => c.recommendation.includes('Priority catalog'))\n ) {\n console.log(`\\n📋 Catalog Priority Resolutions:`);\n plan.conflicts\n .filter((c) => c.recommendation.includes('Priority catalog'))\n .forEach((conflict) => {\n console.log(` • ${conflict.packageName}: ${conflict.recommendation}`);\n });\n }\n } catch (error) {\n errors.push({\n catalogName: '',\n packageName: '',\n error: `Failed to save workspace: ${error}`,\n fatal: true,\n });\n }\n }\n\n return {\n success: errors.filter((e) => e.fatal).length === 0,\n workspace: plan.workspace,\n updatedDependencies,\n skippedDependencies,\n errors,\n totalUpdated: updatedDependencies.length,\n totalSkipped: skippedDependencies.length,\n totalErrors: errors.length,\n };\n }\n\n /**\n * Analyze the impact of updating a specific dependency\n */\n async analyzeImpact(\n catalogName: string,\n packageName: string,\n newVersion: string,\n workspacePath?: string\n ): Promise<ImpactAnalysis> {\n const wsPath = WorkspacePath.fromString(workspacePath || process.cwd());\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(wsPath);\n if (!workspace) {\n throw new Error(`No pnpm workspace found at ${wsPath.toString()}`);\n }\n\n const catalog = workspace.getCatalogs().get(catalogName);\n if (!catalog) {\n throw new Error(`Catalog \"${catalogName}\" not found`);\n }\n\n const currentRange = catalog.getDependencyVersion(packageName);\n if (!currentRange) {\n throw new Error(`Package \"${packageName}\" not found in catalog \"${catalogName}\"`);\n }\n\n const currentVersion = currentRange.toString();\n const proposedVersion = Version.fromString(newVersion);\n const currentVersionObj = currentRange.getMinVersion();\n\n if (!currentVersionObj) {\n throw new Error(`Cannot determine current version for ${packageName}`);\n }\n\n const updateType = currentVersionObj.getDifferenceType(proposedVersion);\n\n // Get affected packages\n const affectedPackagesCollection = workspace.getPackagesUsingCatalogDependency(\n catalogName,\n packageName\n );\n const packageImpacts: PackageImpact[] = [];\n\n for (const pkg of affectedPackagesCollection.getAll()) {\n const catalogRefs = pkg\n .getCatalogReferences()\n .filter(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n );\n\n for (const ref of catalogRefs) {\n const isBreakingChange = updateType === 'major';\n const compatibilityRisk = this.assessCompatibilityRisk(updateType);\n\n packageImpacts.push({\n packageName: pkg.getName(),\n packagePath: pkg.getPath().toString(),\n dependencyType: ref.getDependencyType(),\n isBreakingChange,\n compatibilityRisk,\n });\n }\n }\n\n // Check security impact\n const securityImpact = await this.analyzeSecurityImpact(\n packageName,\n currentVersion,\n newVersion\n );\n\n // Assess overall risk\n const riskLevel = this.assessOverallRisk(updateType, packageImpacts, securityImpact);\n\n // Generate recommendations\n const recommendations = this.generateRecommendations(\n updateType,\n securityImpact,\n packageImpacts\n );\n\n return {\n packageName,\n catalogName,\n currentVersion,\n proposedVersion: newVersion,\n updateType: updateType as 'major' | 'minor' | 'patch',\n affectedPackages: packageImpacts,\n riskLevel,\n securityImpact,\n recommendations,\n };\n }\n\n /**\n * Process packages in parallel with concurrency control and progress tracking\n */\n private async processPackagesInParallel(\n packagesToCheck: Array<[string, any]>,\n catalog: any,\n workspace: any,\n config: any,\n options: CheckOptions,\n progressReporter: ProgressReporter | null,\n startingCompleted: number = 0,\n totalPackages: number = 0\n ): Promise<OutdatedDependencyInfo[]> {\n const concurrency = config.advanced?.concurrency || 8; // Increased from 5 to match NCU\n const outdatedDependencies: OutdatedDependencyInfo[] = [];\n let completed = startingCompleted;\n\n // Process packages in chunks with true parallelism within each chunk\n const chunks = this.chunkArray(packagesToCheck, concurrency);\n\n for (const chunk of chunks) {\n const chunkResults = await Promise.all(\n chunk.map(async ([packageName, currentRange]) => {\n try {\n const result = await this.processPackageCheck(\n packageName,\n currentRange,\n catalog,\n workspace,\n config,\n options\n );\n\n // Update progress for successful package\n completed++;\n if (progressReporter && totalPackages > 0) {\n progressReporter.update(completed, `正在检查依赖包: ${packageName}`);\n }\n\n return result;\n } catch (error) {\n // Update progress even for failed packages\n completed++;\n if (progressReporter && totalPackages > 0) {\n progressReporter.update(completed, `跳过包 ${packageName} (检查失败)`);\n }\n\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'check',\n });\n return null;\n }\n })\n );\n\n // Add successful results to the array\n chunkResults.forEach((result) => {\n if (result) {\n outdatedDependencies.push(result);\n }\n });\n }\n\n return outdatedDependencies;\n }\n\n /**\n * Process a single package check (extracted from the main loop)\n */\n private async processPackageCheck(\n packageName: string,\n currentRange: any,\n catalog: any,\n workspace: any,\n config: any,\n options: CheckOptions\n ): Promise<OutdatedDependencyInfo | null> {\n // Get package-specific configuration\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config);\n const effectiveTarget = packageConfig.target as UpdateTarget;\n\n // Defer security checks - only do them after we know the package needs updating\n const outdatedInfo = await this.checkPackageUpdate(\n packageName,\n currentRange,\n effectiveTarget,\n options.includePrerelease || config.defaults?.includePrerelease || false\n );\n\n if (!outdatedInfo) {\n return null; // Package doesn't need updating\n }\n\n // Now check for security vulnerabilities only for packages that need updating\n let hasSecurityVulnerabilities = false;\n if (config.security?.autoFixVulnerabilities) {\n try {\n const currentVersion = currentRange.getMinVersion()?.toString();\n if (currentVersion) {\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n packageName,\n currentVersion\n );\n hasSecurityVulnerabilities = securityReport.hasVulnerabilities;\n\n // Allow major updates for security fixes if configured\n if (hasSecurityVulnerabilities && config.security.allowMajorForSecurity) {\n // Re-check with 'latest' target if security fix requires it\n const securityFixInfo = await this.checkPackageUpdate(\n packageName,\n currentRange,\n 'latest',\n options.includePrerelease || config.defaults?.includePrerelease || false\n );\n if (securityFixInfo) {\n Object.assign(outdatedInfo, securityFixInfo);\n }\n }\n }\n } catch (error) {\n UserFriendlyErrorHandler.handleSecurityCheckFailure(packageName, error as Error);\n }\n }\n\n // Get affected packages\n const affectedPackages = workspace\n .getPackagesUsingCatalogDependency(catalog.getName(), packageName)\n .getPackageNames();\n\n // Log security notifications if enabled\n if (hasSecurityVulnerabilities && config.security?.notifyOnSecurityUpdate) {\n console.warn(\n `🔒 Security vulnerability detected in ${packageName}@${outdatedInfo.currentVersion}`\n );\n }\n\n return {\n ...outdatedInfo,\n affectedPackages,\n isSecurityUpdate: hasSecurityVulnerabilities || outdatedInfo.isSecurityUpdate,\n };\n }\n\n /**\n * Split array into chunks for parallel processing\n */\n private chunkArray<T>(array: T[], chunkSize: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(array.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * Check if a package needs updating\n */\n private async checkPackageUpdate(\n packageName: string,\n currentRange: VersionRange,\n target: UpdateTarget,\n includePrerelease: boolean\n ): Promise<OutdatedDependencyInfo | null> {\n try {\n // Use lightweight version API for better performance\n const versionInfo = await this.registryService.getPackageVersions(packageName);\n\n let targetVersion: Version;\n\n switch (target) {\n case 'latest':\n targetVersion = Version.fromString(versionInfo.latestVersion);\n break;\n case 'greatest':\n targetVersion = await this.registryService.getGreatestVersion(packageName);\n break;\n case 'newest':\n const newestVersions = await this.registryService.getNewestVersions(packageName, 1);\n if (!newestVersions[0]) {\n throw new Error(`No versions found for ${packageName}`);\n }\n targetVersion = newestVersions[0];\n break;\n case 'minor':\n case 'patch':\n targetVersion = await this.getConstrainedVersion(packageName, currentRange, target);\n break;\n default:\n targetVersion = Version.fromString(versionInfo.latestVersion);\n }\n\n // Skip prereleases unless explicitly requested\n if (!includePrerelease && targetVersion.isPrerelease()) {\n return null;\n }\n\n const currentVersion = currentRange.getMinVersion();\n if (!currentVersion) {\n return null;\n }\n\n // Check if update is needed\n if (!targetVersion.isNewerThan(currentVersion)) {\n return null;\n }\n\n const updateType = currentVersion.getDifferenceType(targetVersion);\n\n // Check for security vulnerabilities\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n packageName,\n currentVersion.toString()\n );\n\n return {\n packageName,\n currentVersion: currentVersion.toString(),\n latestVersion: targetVersion.toString(),\n wantedVersion: targetVersion.toString(),\n updateType: updateType as 'major' | 'minor' | 'patch',\n isSecurityUpdate: securityReport.hasVulnerabilities,\n affectedPackages: [], // Will be filled by caller\n };\n } catch (error) {\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'update-check',\n });\n return null;\n }\n }\n\n /**\n * Get version constrained by update type\n */\n private async getConstrainedVersion(\n packageName: string,\n currentRange: VersionRange,\n constraint: 'minor' | 'patch'\n ): Promise<Version> {\n const currentVersion = currentRange.getMinVersion();\n if (!currentVersion) {\n throw new Error(`Cannot determine current version for ${packageName}`);\n }\n\n const versionInfo = await this.registryService.getPackageVersions(packageName);\n\n // Filter versions based on constraint\n const compatibleVersions = versionInfo.versions.filter((v) => {\n try {\n const version = Version.fromString(v);\n const diff = currentVersion.getDifferenceType(version);\n\n if (constraint === 'patch') {\n return diff === 'patch' || diff === 'same';\n } else if (constraint === 'minor') {\n return diff === 'minor' || diff === 'patch' || diff === 'same';\n }\n\n return false;\n } catch {\n return false;\n }\n });\n\n if (compatibleVersions.length === 0) {\n return currentVersion;\n }\n\n // Return the highest compatible version\n if (!compatibleVersions[0]) {\n throw new Error(`No compatible versions found for ${packageName}`);\n }\n return Version.fromString(compatibleVersions[0]);\n }\n\n /**\n * Generate update reason description\n */\n private getUpdateReason(outdated: OutdatedDependencyInfo): string {\n if (outdated.isSecurityUpdate) {\n return 'Security update available';\n }\n\n switch (outdated.updateType) {\n case 'major':\n return 'Major version update available';\n case 'minor':\n return 'Minor version update available';\n case 'patch':\n return 'Patch version update available';\n default:\n return 'Update available';\n }\n }\n\n /**\n * Analyze security impact of version change\n */\n private async analyzeSecurityImpact(\n packageName: string,\n currentVersion: string,\n newVersion: string\n ): Promise<SecurityImpact> {\n try {\n const [currentSecurity, newSecurity] = await Promise.all([\n this.registryService.checkSecurityVulnerabilities(packageName, currentVersion),\n this.registryService.checkSecurityVulnerabilities(packageName, newVersion),\n ]);\n\n const fixedVulnerabilities =\n currentSecurity.vulnerabilities.length - newSecurity.vulnerabilities.length;\n const newVulnerabilities = Math.max(\n 0,\n newSecurity.vulnerabilities.length - currentSecurity.vulnerabilities.length\n );\n\n let severityChange: SecurityImpact['severityChange'] = 'same';\n if (fixedVulnerabilities > 0) {\n severityChange = 'better';\n } else if (newVulnerabilities > 0) {\n severityChange = 'worse';\n }\n\n return {\n hasVulnerabilities: currentSecurity.hasVulnerabilities || newSecurity.hasVulnerabilities,\n fixedVulnerabilities: Math.max(0, fixedVulnerabilities),\n newVulnerabilities,\n severityChange,\n };\n } catch {\n return {\n hasVulnerabilities: false,\n fixedVulnerabilities: 0,\n newVulnerabilities: 0,\n severityChange: 'same',\n };\n }\n }\n\n /**\n * Assess compatibility risk for update type\n */\n private assessCompatibilityRisk(updateType: string): 'low' | 'medium' | 'high' {\n switch (updateType) {\n case 'patch':\n return 'low';\n case 'minor':\n return 'medium';\n case 'major':\n return 'high';\n default:\n return 'medium';\n }\n }\n\n /**\n * Assess overall risk level\n */\n private assessOverallRisk(\n updateType: string,\n packageImpacts: PackageImpact[],\n securityImpact: SecurityImpact\n ): 'low' | 'medium' | 'high' {\n // Security fixes reduce risk\n if (securityImpact.fixedVulnerabilities > 0) {\n return updateType === 'major' ? 'medium' : 'low';\n }\n\n // New vulnerabilities increase risk\n if (securityImpact.newVulnerabilities > 0) {\n return 'high';\n }\n\n // Base risk on update type and number of affected packages\n const affectedPackageCount = packageImpacts.length;\n\n if (updateType === 'major') {\n return affectedPackageCount > 5 ? 'high' : 'medium';\n } else if (updateType === 'minor') {\n return affectedPackageCount > 10 ? 'medium' : 'low';\n } else {\n return 'low';\n }\n }\n\n /**\n * Generate recommendations based on analysis\n */\n private generateRecommendations(\n updateType: string,\n securityImpact: SecurityImpact,\n packageImpacts: PackageImpact[]\n ): string[] {\n const recommendations: string[] = [];\n\n if (securityImpact.fixedVulnerabilities > 0) {\n recommendations.push('🔒 Security update recommended - fixes known vulnerabilities');\n }\n\n if (securityImpact.newVulnerabilities > 0) {\n recommendations.push('⚠️ New vulnerabilities detected - review carefully before updating');\n }\n\n if (updateType === 'major') {\n recommendations.push('📖 Review changelog for breaking changes before updating');\n recommendations.push('🧪 Test thoroughly in development environment');\n }\n\n const breakingChangePackages = packageImpacts.filter((p) => p.isBreakingChange);\n if (breakingChangePackages.length > 0) {\n recommendations.push(`🔧 ${breakingChangePackages.length} package(s) may need code changes`);\n }\n\n if (packageImpacts.length > 5) {\n recommendations.push('📦 Many packages affected - consider updating in batches');\n }\n\n if (recommendations.length === 0) {\n recommendations.push('✅ Low risk update - safe to proceed');\n }\n\n return recommendations;\n }\n\n /**\n * Create sync version updates for packages that should be synchronized across catalogs\n */\n private async createSyncVersionUpdates(\n syncVersions: string[],\n workspace: any,\n existingUpdates: PlannedUpdate[]\n ): Promise<PlannedUpdate[]> {\n const syncUpdates: PlannedUpdate[] = [];\n const catalogs = workspace.getCatalogs();\n const allCatalogs = catalogs.getAll();\n\n for (const packageName of syncVersions) {\n // Check if this package exists in multiple catalogs\n const catalogsWithPackage = allCatalogs.filter(\n (catalog: any) => catalog && catalog.getDependencyVersion(packageName)\n );\n\n if (catalogsWithPackage.length <= 1) {\n continue; // No need to sync if package is only in one catalog\n }\n\n // Find the highest version from existing updates or determine target version\n let targetVersion: string | null = null;\n let targetUpdateType: 'major' | 'minor' | 'patch' = 'patch';\n\n // Check if this package has any existing updates\n const existingUpdate = existingUpdates.find((u) => u.packageName === packageName);\n if (existingUpdate) {\n targetVersion = existingUpdate.newVersion;\n targetUpdateType = existingUpdate.updateType;\n } else {\n // Get latest version for this package using lightweight API\n try {\n const versionInfo = await this.registryService.getPackageVersions(packageName);\n targetVersion = versionInfo.latestVersion;\n } catch (error) {\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'sync',\n });\n continue;\n }\n }\n\n if (!targetVersion) continue;\n\n // Create sync updates for all catalogs that need updating\n for (const catalog of catalogsWithPackage) {\n const currentRange = catalog.getDependencyVersion(packageName);\n if (!currentRange) continue;\n\n const currentVersion = currentRange.getMinVersion();\n if (!currentVersion) continue;\n\n const currentVersionString = currentVersion.toString();\n\n // Skip if already at target version\n if (currentVersionString === targetVersion) continue;\n\n // Check if this update already exists\n const existingUpdateForCatalog = existingUpdates.find(\n (u) => u.packageName === packageName && u.catalogName === catalog.getName()\n );\n\n if (existingUpdateForCatalog) {\n // Update the existing update to use the sync version\n existingUpdateForCatalog.newVersion = targetVersion;\n existingUpdateForCatalog.reason = `Sync version across catalogs: ${existingUpdateForCatalog.reason}`;\n } else {\n // Create new sync update\n const affectedPackages = workspace\n .getPackagesUsingCatalogDependency(catalog.getName(), packageName)\n .getPackageNames();\n\n const syncUpdate: PlannedUpdate = {\n catalogName: catalog.getName(),\n packageName: packageName,\n currentVersion: currentVersionString,\n newVersion: targetVersion,\n updateType: targetUpdateType,\n reason: `Sync version with other catalogs`,\n affectedPackages,\n requireConfirmation: true, // Sync updates should be confirmed\n autoUpdate: false,\n groupUpdate: true,\n };\n\n syncUpdates.push(syncUpdate);\n }\n }\n }\n\n return syncUpdates;\n }\n\n /**\n * Resolve version conflicts using catalog priority\n */\n private resolveVersionConflict(\n packageName: string,\n packageUpdates: PlannedUpdate[],\n catalogPriority: string[]\n ): VersionConflict | null {\n // Find the highest priority catalog with an update for this package\n let priorityCatalog: PlannedUpdate | null = null;\n\n for (const catalogName of catalogPriority) {\n const catalogUpdate = packageUpdates.find((u) => u.catalogName === catalogName);\n if (catalogUpdate) {\n priorityCatalog = catalogUpdate;\n break;\n }\n }\n\n // If no priority catalog found, use the first one\n if (!priorityCatalog) {\n priorityCatalog = packageUpdates[0] || null;\n }\n\n // Update all other catalogs to use the priority catalog's version\n const priorityVersion = priorityCatalog?.newVersion;\n if (priorityVersion && priorityCatalog) {\n for (const update of packageUpdates) {\n if (update.catalogName !== priorityCatalog.catalogName) {\n update.newVersion = priorityVersion;\n update.reason = `Using version from priority catalog (${priorityCatalog.catalogName}): ${update.reason}`;\n }\n }\n }\n\n // Create conflict record for reporting\n const uniqueVersions = new Set(packageUpdates.map((u) => u.newVersion));\n if (uniqueVersions.size > 1) {\n return {\n packageName,\n catalogs: packageUpdates.map((u) => ({\n catalogName: u.catalogName,\n currentVersion: u.currentVersion,\n proposedVersion: u.newVersion,\n })),\n recommendation: `Resolved using catalog priority. Priority catalog '${priorityCatalog?.catalogName}' version '${priorityVersion}' selected.`,\n };\n }\n\n return null;\n }\n}\n","/**\n * Workspace Service\n *\n * Application service for workspace discovery, validation, and management.\n * Provides high-level operations for working with pnpm workspaces.\n */\n\nimport { Workspace } from '../../domain/entities/workspace.js';\nimport { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\n\nexport interface WorkspaceInfo {\n path: string;\n name: string;\n isValid: boolean;\n hasPackages: boolean;\n hasCatalogs: boolean;\n packageCount: number;\n catalogCount: number;\n catalogNames: string[];\n}\n\nexport interface WorkspaceValidationReport {\n isValid: boolean;\n workspace: WorkspaceInfo;\n errors: string[];\n warnings: string[];\n recommendations: string[];\n}\n\nexport interface CatalogInfo {\n name: string;\n packageCount: number;\n packages: string[];\n mode: string;\n}\n\nexport interface PackageInfo {\n name: string;\n path: string;\n hasPackageJson: boolean;\n catalogReferences: CatalogReferenceInfo[];\n dependencies: DependencyInfo[];\n}\n\nexport interface CatalogReferenceInfo {\n catalogName: string;\n packageName: string;\n dependencyType: string;\n}\n\nexport interface DependencyInfo {\n name: string;\n version: string;\n type: string;\n isCatalogReference: boolean;\n}\n\nexport class WorkspaceService {\n constructor(private readonly workspaceRepository: WorkspaceRepository) {}\n\n /**\n * Discover workspace from current directory or specified path\n */\n async discoverWorkspace(searchPath?: string): Promise<Workspace> {\n const path = searchPath ? WorkspacePath.fromString(searchPath) : undefined;\n\n const workspace = await this.workspaceRepository.discoverWorkspace(path);\n\n if (!workspace) {\n throw new Error(\n searchPath\n ? `No pnpm workspace found at or above ${searchPath}`\n : 'No pnpm workspace found in current directory or parent directories'\n );\n }\n\n return workspace;\n }\n\n /**\n * Get workspace information\n */\n async getWorkspaceInfo(workspacePath?: string): Promise<WorkspaceInfo> {\n const path = WorkspacePath.fromString(workspacePath || process.cwd());\n\n // Try to load workspace\n const workspace = await this.workspaceRepository.findByPath(path);\n\n if (!workspace) {\n return {\n path: path.toString(),\n name: path.getDirectoryName(),\n isValid: false,\n hasPackages: false,\n hasCatalogs: false,\n packageCount: 0,\n catalogCount: 0,\n catalogNames: [],\n };\n }\n\n const packages = workspace.getPackages();\n const catalogs = workspace.getCatalogs();\n\n return {\n path: path.toString(),\n name: path.getDirectoryName(),\n isValid: true,\n hasPackages: !packages.isEmpty(),\n hasCatalogs: !catalogs.isEmpty(),\n packageCount: packages.size(),\n catalogCount: catalogs.size(),\n catalogNames: catalogs.getCatalogNames(),\n };\n }\n\n /**\n * Validate workspace integrity and configuration\n */\n async validateWorkspace(workspacePath?: string): Promise<WorkspaceValidationReport> {\n const path = WorkspacePath.fromString(workspacePath || process.cwd());\n const workspaceInfo = await this.getWorkspaceInfo(workspacePath);\n\n if (!workspaceInfo.isValid) {\n return {\n isValid: false,\n workspace: workspaceInfo,\n errors: ['Not a valid pnpm workspace'],\n warnings: [],\n recommendations: [\n 'Initialize a pnpm workspace with: pnpm init',\n 'Create pnpm-workspace.yaml file',\n 'Define package patterns in pnpm-workspace.yaml',\n ],\n };\n }\n\n // Load workspace for detailed validation\n const workspace = await this.workspaceRepository.findByPath(path);\n if (!workspace) {\n throw new Error('Workspace validation failed - workspace not found');\n }\n\n // Validate workspace consistency\n const validationResult = workspace.validateConsistency();\n const recommendations: string[] = [];\n\n // Generate recommendations based on workspace state\n if (!workspaceInfo.hasCatalogs) {\n recommendations.push('Consider using catalogs to centralize dependency management');\n }\n\n if (workspaceInfo.packageCount === 0) {\n recommendations.push(\n 'No packages found - check your package patterns in pnpm-workspace.yaml'\n );\n }\n\n if (workspaceInfo.packageCount > 20) {\n recommendations.push(\n 'Large workspace detected - consider organizing packages into logical groups'\n );\n }\n\n // Validate catalogs\n const catalogValidation = workspace.getCatalogs().validate();\n const allErrors = [...validationResult.getErrors(), ...catalogValidation.getErrors()];\n const allWarnings = [...validationResult.getWarnings(), ...catalogValidation.getWarnings()];\n\n return {\n isValid: validationResult.getIsValid() && catalogValidation.getIsValid(),\n workspace: workspaceInfo,\n errors: allErrors,\n warnings: allWarnings,\n recommendations,\n };\n }\n\n /**\n * Get detailed catalog information\n */\n async getCatalogs(workspacePath?: string): Promise<CatalogInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const catalogs = workspace.getCatalogs();\n\n return catalogs.getAll().map((catalog) => ({\n name: catalog.getName(),\n packageCount: catalog.getPackageNames().length,\n packages: catalog.getPackageNames(),\n mode: catalog.getMode(),\n }));\n }\n\n /**\n * Get detailed package information\n */\n async getPackages(workspacePath?: string): Promise<PackageInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const packages = workspace.getPackages();\n\n return packages.getAll().map((pkg) => {\n const catalogReferences = pkg.getCatalogReferences();\n const dependencies = pkg.getDependencies();\n\n // Collect all dependencies from all types\n const allDependencies: DependencyInfo[] = [];\n const depTypes = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const;\n\n for (const depType of depTypes) {\n const deps = dependencies.getDependenciesByType(depType);\n for (const [name, version] of deps) {\n allDependencies.push({\n name,\n version,\n type: depType,\n isCatalogReference: version.startsWith('catalog:'),\n });\n }\n }\n\n return {\n name: pkg.getName(),\n path: pkg.getPath().toString(),\n hasPackageJson: true, // If package was loaded, it has package.json\n catalogReferences: catalogReferences.map((ref) => ({\n catalogName: ref.getCatalogName(),\n packageName: ref.getPackageName(),\n dependencyType: ref.getDependencyType(),\n })),\n dependencies: allDependencies,\n };\n });\n }\n\n /**\n * Check if workspace uses catalogs\n */\n async usesCatalogs(workspacePath?: string): Promise<boolean> {\n try {\n const workspace = await this.discoverWorkspace(workspacePath);\n return !workspace.getCatalogs().isEmpty();\n } catch {\n return false;\n }\n }\n\n /**\n * Get packages that use a specific catalog\n */\n async getPackagesUsingCatalog(\n catalogName: string,\n workspacePath?: string\n ): Promise<PackageInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const packagesUsingCatalog = workspace.getPackages().findPackagesUsingCatalog(catalogName);\n\n return packagesUsingCatalog.map((pkg) => {\n const catalogReferences = pkg\n .getCatalogReferences()\n .filter((ref) => ref.getCatalogName() === catalogName);\n\n const dependencies = pkg.getDependencies();\n const allDependencies: DependencyInfo[] = [];\n const depTypes = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const;\n\n for (const depType of depTypes) {\n const deps = dependencies.getDependenciesByType(depType);\n for (const [name, version] of deps) {\n allDependencies.push({\n name,\n version,\n type: depType,\n isCatalogReference: version.startsWith('catalog:'),\n });\n }\n }\n\n return {\n name: pkg.getName(),\n path: pkg.getPath().toString(),\n hasPackageJson: true,\n catalogReferences: catalogReferences.map((ref) => ({\n catalogName: ref.getCatalogName(),\n packageName: ref.getPackageName(),\n dependencyType: ref.getDependencyType(),\n })),\n dependencies: allDependencies,\n };\n });\n }\n\n /**\n * Get workspace statistics\n */\n async getWorkspaceStats(workspacePath?: string): Promise<WorkspaceStats> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const packages = workspace.getPackages();\n const catalogs = workspace.getCatalogs();\n\n // Count dependencies\n let totalDependencies = 0;\n let catalogDependencies = 0;\n const dependencyTypes = {\n dependencies: 0,\n devDependencies: 0,\n peerDependencies: 0,\n optionalDependencies: 0,\n };\n\n for (const pkg of packages.getAll()) {\n const deps = pkg.getDependencies();\n const catalogRefs = pkg.getCatalogReferences();\n\n catalogDependencies += catalogRefs.length;\n\n for (const depType of Object.keys(dependencyTypes) as Array<keyof typeof dependencyTypes>) {\n const typeDeps = deps.getDependenciesByType(depType);\n dependencyTypes[depType] += typeDeps.size;\n totalDependencies += typeDeps.size;\n }\n }\n\n // Count catalog definitions\n let totalCatalogEntries = 0;\n for (const catalog of catalogs.getAll()) {\n totalCatalogEntries += catalog.getPackageNames().length;\n }\n\n return {\n workspace: {\n path: workspace.getPath().toString(),\n name: workspace.getPath().getDirectoryName(),\n },\n packages: {\n total: packages.size(),\n withCatalogReferences: packages.findPackagesWithCatalogReferences().length,\n },\n catalogs: {\n total: catalogs.size(),\n totalEntries: totalCatalogEntries,\n },\n dependencies: {\n total: totalDependencies,\n catalogReferences: catalogDependencies,\n byType: dependencyTypes,\n },\n };\n }\n\n /**\n * Find workspaces in a directory tree\n */\n async findWorkspaces(searchRoot: string): Promise<WorkspaceInfo[]> {\n // This would implement a recursive search for pnpm workspaces\n // For now, we'll just check the provided directory\n const workspaceInfo = await this.getWorkspaceInfo(searchRoot);\n return workspaceInfo.isValid ? [workspaceInfo] : [];\n }\n\n /**\n * Check workspace health\n */\n async checkHealth(workspacePath?: string): Promise<WorkspaceHealthReport> {\n const validation = await this.validateWorkspace(workspacePath);\n const stats = await this.getWorkspaceStats(workspacePath);\n\n const issues: HealthIssue[] = [];\n const score = this.calculateHealthScore(validation, stats, issues);\n\n return {\n score,\n status: this.getHealthStatus(score),\n validation,\n stats,\n issues,\n lastChecked: new Date(),\n };\n }\n\n /**\n * Calculate workspace health score (0-100)\n */\n private calculateHealthScore(\n validation: WorkspaceValidationReport,\n stats: WorkspaceStats,\n issues: HealthIssue[]\n ): number {\n let score = 100;\n\n // Deduct points for errors\n score -= validation.errors.length * 20;\n\n // Deduct points for warnings\n score -= validation.warnings.length * 5;\n\n // Deduct points for workspace issues\n if (!stats.workspace) {\n score -= 30;\n }\n\n if (stats.packages.total === 0) {\n score -= 20;\n issues.push({\n type: 'warning',\n message: 'No packages found in workspace',\n suggestion: 'Check package patterns in pnpm-workspace.yaml',\n });\n }\n\n if (stats.catalogs.total === 0) {\n score -= 10;\n issues.push({\n type: 'info',\n message: 'No catalogs defined',\n suggestion: 'Consider using catalogs for better dependency management',\n });\n }\n\n // Bonus for good practices\n if (stats.dependencies.catalogReferences > 0) {\n score += 5;\n }\n\n return Math.max(0, Math.min(100, score));\n }\n\n /**\n * Get health status from score\n */\n private getHealthStatus(score: number): 'excellent' | 'good' | 'fair' | 'poor' {\n if (score >= 90) return 'excellent';\n if (score >= 70) return 'good';\n if (score >= 50) return 'fair';\n return 'poor';\n }\n}\n\nexport interface WorkspaceStats {\n workspace: {\n path: string;\n name: string;\n };\n packages: {\n total: number;\n withCatalogReferences: number;\n };\n catalogs: {\n total: number;\n totalEntries: number;\n };\n dependencies: {\n total: number;\n catalogReferences: number;\n byType: {\n dependencies: number;\n devDependencies: number;\n peerDependencies: number;\n optionalDependencies: number;\n };\n };\n}\n\nexport interface HealthIssue {\n type: 'error' | 'warning' | 'info';\n message: string;\n suggestion: string;\n}\n\nexport interface WorkspaceHealthReport {\n score: number;\n status: 'excellent' | 'good' | 'fair' | 'poor';\n validation: WorkspaceValidationReport;\n stats: WorkspaceStats;\n issues: HealthIssue[];\n lastChecked: Date;\n}\n","/**\n * Catalog Entity\n *\n * Represents a pnpm catalog that manages dependency versions centrally.\n * A catalog contains a collection of dependencies with their version ranges.\n */\n\nimport { VersionRange } from '../value-objects/version.js';\n\nexport type CatalogId = string;\nexport type PackageName = string;\nexport type CatalogName = string;\n\nexport class Catalog {\n private readonly id: CatalogId;\n private readonly name: CatalogName;\n private readonly dependencies: Map<PackageName, VersionRange>;\n private readonly mode: CatalogMode;\n\n private constructor(\n id: CatalogId,\n name: CatalogName,\n dependencies: Map<PackageName, VersionRange>,\n mode: CatalogMode = CatalogMode.MANUAL\n ) {\n this.id = id;\n this.name = name;\n this.dependencies = new Map(dependencies);\n this.mode = mode;\n }\n\n /**\n * Create a new Catalog\n */\n public static create(\n id: CatalogId,\n name: CatalogName,\n dependencies: Record<string, string> = {},\n mode: CatalogMode = CatalogMode.MANUAL\n ): Catalog {\n const dependencyMap = new Map<PackageName, VersionRange>();\n\n for (const [packageName, versionRange] of Object.entries(dependencies)) {\n try {\n dependencyMap.set(packageName, VersionRange.fromString(versionRange));\n } catch (error) {\n throw new Error(\n `Invalid version range for package \"${packageName}\" in catalog \"${name}\": ${versionRange}`\n );\n }\n }\n\n return new Catalog(id, name, dependencyMap, mode);\n }\n\n /**\n * Get catalog identifier\n */\n public getId(): CatalogId {\n return this.id;\n }\n\n /**\n * Get catalog name\n */\n public getName(): CatalogName {\n return this.name;\n }\n\n /**\n * Get catalog mode\n */\n public getMode(): CatalogMode {\n return this.mode;\n }\n\n /**\n * Get all dependencies in this catalog\n */\n public getDependencies(): ReadonlyMap<PackageName, VersionRange> {\n return this.dependencies;\n }\n\n /**\n * Get all package names in this catalog\n */\n public getPackageNames(): PackageName[] {\n return Array.from(this.dependencies.keys());\n }\n\n /**\n * Check if catalog contains a specific package\n */\n public hasDependency(packageName: PackageName): boolean {\n return this.dependencies.has(packageName);\n }\n\n /**\n * Get version range for a specific package\n */\n public getDependencyVersion(packageName: PackageName): VersionRange | null {\n return this.dependencies.get(packageName) || null;\n }\n\n /**\n * Add or update a dependency\n */\n public updateDependencyVersion(packageName: PackageName, versionRange: string): void {\n try {\n const parsedRange = VersionRange.fromString(versionRange);\n this.dependencies.set(packageName, parsedRange);\n } catch (error) {\n throw new Error(`Invalid version range for package \"${packageName}\": ${versionRange}`);\n }\n }\n\n /**\n * Remove a dependency from the catalog\n */\n public removeDependency(packageName: PackageName): boolean {\n return this.dependencies.delete(packageName);\n }\n\n /**\n * Check version compatibility for a package\n */\n public checkVersionCompatibility(packageName: PackageName, requestedVersion: string): boolean {\n const catalogVersion = this.dependencies.get(packageName);\n if (!catalogVersion) {\n return false;\n }\n\n try {\n const requestedRange = VersionRange.fromString(requestedVersion);\n return catalogVersion.isCompatibleWith(requestedRange);\n } catch {\n return false;\n }\n }\n\n /**\n * Get packages that would be affected by changing a dependency version\n */\n public getAffectedPackagesByDependencyChange(\n packageName: PackageName,\n newVersionRange: string\n ): PackageName[] {\n if (!this.hasDependency(packageName)) {\n return [];\n }\n\n try {\n const newRange = VersionRange.fromString(newVersionRange);\n const currentRange = this.dependencies.get(packageName)!;\n\n // If the ranges are compatible, no packages are affected\n if (currentRange.isCompatibleWith(newRange)) {\n return [];\n }\n\n // Return all packages that use this catalog (this would typically be resolved\n // at the aggregate level with workspace information)\n return [packageName];\n } catch {\n return [packageName];\n }\n }\n\n /**\n * Validate catalog integrity\n */\n public validate(): CatalogValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for empty catalog\n if (this.dependencies.size === 0) {\n warnings.push(`Catalog \"${this.name}\" is empty`);\n }\n\n // Validate each dependency\n for (const [packageName, versionRange] of this.dependencies) {\n // Check package name format\n if (!this.isValidPackageName(packageName)) {\n errors.push(`Invalid package name: \"${packageName}\"`);\n }\n\n // Check for common issues\n if (versionRange.toString().includes('*')) {\n warnings.push(`Package \"${packageName}\" uses wildcard version which may be unstable`);\n }\n }\n\n return new CatalogValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Convert catalog to plain object for serialization\n */\n public toPlainObject(): CatalogData {\n const dependencies: Record<string, string> = {};\n\n for (const [packageName, versionRange] of this.dependencies) {\n dependencies[packageName] = versionRange.toString();\n }\n\n return {\n id: this.id,\n name: this.name,\n dependencies,\n mode: this.mode,\n };\n }\n\n /**\n * Create catalog from plain object\n */\n public static fromPlainObject(data: CatalogData): Catalog {\n return Catalog.create(data.id, data.name, data.dependencies, data.mode);\n }\n\n /**\n * Check if a package name is valid\n */\n private isValidPackageName(packageName: string): boolean {\n // Basic npm package name validation\n const validPackageNameRegex = /^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n return validPackageNameRegex.test(packageName);\n }\n\n /**\n * Check equality with another catalog\n */\n public equals(other: Catalog): boolean {\n if (this.id !== other.id || this.name !== other.name || this.mode !== other.mode) {\n return false;\n }\n\n if (this.dependencies.size !== other.dependencies.size) {\n return false;\n }\n\n for (const [packageName, versionRange] of this.dependencies) {\n const otherRange = other.dependencies.get(packageName);\n if (!otherRange || !versionRange.equals(otherRange)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Catalog Mode Enum\n */\nexport enum CatalogMode {\n MANUAL = 'manual',\n STRICT = 'strict',\n PREFER = 'prefer',\n}\n\n/**\n * Catalog Data Interface for serialization\n */\nexport interface CatalogData {\n id: CatalogId;\n name: CatalogName;\n dependencies: Record<string, string>;\n mode: CatalogMode;\n}\n\n/**\n * Catalog Validation Result\n */\nexport class CatalogValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * Package Entity\n *\n * Represents a package in a pnpm workspace that may reference catalog dependencies.\n * Handles package.json structure and catalog dependency references.\n */\n\nimport { WorkspacePath } from '../value-objects/workspacePath.js';\n\nexport type PackageId = string;\nexport type PackageName = string;\nexport type DependencyType =\n | 'dependencies'\n | 'devDependencies'\n | 'peerDependencies'\n | 'optionalDependencies';\n\nexport class Package {\n private readonly id: PackageId;\n private readonly name: PackageName;\n private readonly path: WorkspacePath;\n private readonly dependencies: DependencyCollection;\n private readonly catalogReferences: CatalogReference[];\n private readonly originalData: PackageJsonData;\n\n private constructor(\n id: PackageId,\n name: PackageName,\n path: WorkspacePath,\n dependencies: DependencyCollection,\n catalogReferences: CatalogReference[],\n originalData: PackageJsonData\n ) {\n this.id = id;\n this.name = name;\n this.path = path;\n this.dependencies = dependencies;\n this.catalogReferences = [...catalogReferences];\n this.originalData = { ...originalData };\n }\n\n /**\n * Create a new Package\n */\n public static create(\n id: PackageId,\n name: PackageName,\n path: WorkspacePath,\n packageJsonData: PackageJsonData\n ): Package {\n const dependencies = DependencyCollection.fromPackageJson(packageJsonData);\n const catalogReferences = Package.extractCatalogReferences(packageJsonData);\n\n return new Package(id, name, path, dependencies, catalogReferences, packageJsonData);\n }\n\n /**\n * Get package identifier\n */\n public getId(): PackageId {\n return this.id;\n }\n\n /**\n * Get package name\n */\n public getName(): PackageName {\n return this.name;\n }\n\n /**\n * Get package path\n */\n public getPath(): WorkspacePath {\n return this.path;\n }\n\n /**\n * Get all dependencies\n */\n public getDependencies(): DependencyCollection {\n return this.dependencies;\n }\n\n /**\n * Get catalog references\n */\n public getCatalogReferences(): CatalogReference[] {\n return [...this.catalogReferences];\n }\n\n /**\n * Get catalog dependencies only\n */\n public getCatalogDependencies(): CatalogDependency[] {\n return this.catalogReferences.map(\n (ref) =>\n new CatalogDependency(ref.getPackageName(), ref.getCatalogName(), ref.getDependencyType())\n );\n }\n\n /**\n * Check if package uses a specific catalog dependency\n */\n public usesCatalogDependency(catalogName: string, packageName: string): boolean {\n return this.catalogReferences.some(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n );\n }\n\n /**\n * Update a dependency from catalog\n */\n public updateDependencyFromCatalog(\n catalogName: string,\n packageName: string,\n _newVersion: string\n ): void {\n const reference = this.catalogReferences.find(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n );\n\n if (!reference) {\n throw new Error(\n `Package \"${this.name}\" does not reference \"${packageName}\" from catalog \"${catalogName}\"`\n );\n }\n\n // Update the dependency in the collection\n this.dependencies.updateDependency(\n reference.getDependencyType(),\n packageName,\n `catalog:${catalogName === 'default' ? '' : catalogName}`\n );\n }\n\n /**\n * Get dependencies of a specific type\n */\n public getDependenciesByType(type: DependencyType): Map<string, string> {\n return this.dependencies.getDependenciesByType(type);\n }\n\n /**\n * Get package.json data representation\n */\n public toPackageJsonData(): PackageJsonData {\n // Start with original package.json to preserve fields like scripts, author, etc.\n const data: PackageJsonData = { ...this.originalData };\n\n // Replace dependency sections with updated versions\n data.dependencies = Object.fromEntries(this.dependencies.getDependenciesByType('dependencies'));\n data.devDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('devDependencies')\n );\n data.peerDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('peerDependencies')\n );\n data.optionalDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('optionalDependencies')\n );\n\n return data;\n }\n\n /**\n * Extract catalog references from package.json data\n */\n private static extractCatalogReferences(packageJsonData: PackageJsonData): CatalogReference[] {\n const references: CatalogReference[] = [];\n const dependencyTypes: DependencyType[] = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ];\n\n for (const depType of dependencyTypes) {\n const deps = packageJsonData[depType] || {};\n\n for (const [packageName, version] of Object.entries(deps)) {\n if (typeof version === 'string' && version.startsWith('catalog:')) {\n const catalogName = version === 'catalog:' ? 'default' : version.substring(8);\n references.push(new CatalogReference(catalogName, packageName, depType));\n }\n }\n }\n\n return references;\n }\n\n /**\n * Validate package structure\n */\n public validate(): PackageValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate package name\n if (!this.isValidPackageName(this.name)) {\n errors.push(`Invalid package name: \"${this.name}\"`);\n }\n\n // Validate catalog references\n for (const ref of this.catalogReferences) {\n if (!this.isValidPackageName(ref.getPackageName())) {\n errors.push(`Invalid dependency name in catalog reference: \"${ref.getPackageName()}\"`);\n }\n }\n\n return new PackageValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Check if package name is valid\n */\n private isValidPackageName(packageName: string): boolean {\n const validPackageNameRegex = /^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n return validPackageNameRegex.test(packageName);\n }\n\n /**\n * Check equality with another package\n */\n public equals(other: Package): boolean {\n return this.id === other.id && this.name === other.name && this.path.equals(other.path);\n }\n}\n\n/**\n * Catalog Reference Value Object\n */\nexport class CatalogReference {\n constructor(\n private readonly catalogName: string,\n private readonly packageName: string,\n private readonly dependencyType: DependencyType\n ) {}\n\n public getCatalogName(): string {\n return this.catalogName;\n }\n\n public getPackageName(): string {\n return this.packageName;\n }\n\n public getDependencyType(): DependencyType {\n return this.dependencyType;\n }\n\n public equals(other: CatalogReference): boolean {\n return (\n this.catalogName === other.catalogName &&\n this.packageName === other.packageName &&\n this.dependencyType === other.dependencyType\n );\n }\n}\n\n/**\n * Catalog Dependency Value Object\n */\nexport class CatalogDependency {\n constructor(\n private readonly packageName: string,\n private readonly catalogName: string,\n private readonly dependencyType: DependencyType\n ) {}\n\n public getPackageName(): string {\n return this.packageName;\n }\n\n public getCatalogName(): string {\n return this.catalogName;\n }\n\n public getDependencyType(): DependencyType {\n return this.dependencyType;\n }\n}\n\n/**\n * Dependency Collection Value Object\n */\nexport class DependencyCollection {\n private readonly dependencies: Map<DependencyType, Map<string, string>>;\n\n private constructor(dependencies: Map<DependencyType, Map<string, string>>) {\n this.dependencies = dependencies;\n }\n\n public static empty(): DependencyCollection {\n const deps = new Map<DependencyType, Map<string, string>>();\n deps.set('dependencies', new Map());\n deps.set('devDependencies', new Map());\n deps.set('peerDependencies', new Map());\n deps.set('optionalDependencies', new Map());\n return new DependencyCollection(deps);\n }\n\n public static fromPackageJson(packageJsonData: PackageJsonData): DependencyCollection {\n const deps = new Map<DependencyType, Map<string, string>>();\n\n deps.set('dependencies', new Map(Object.entries(packageJsonData.dependencies || {})));\n deps.set('devDependencies', new Map(Object.entries(packageJsonData.devDependencies || {})));\n deps.set('peerDependencies', new Map(Object.entries(packageJsonData.peerDependencies || {})));\n deps.set(\n 'optionalDependencies',\n new Map(Object.entries(packageJsonData.optionalDependencies || {}))\n );\n\n return new DependencyCollection(deps);\n }\n\n public getDependenciesByType(type: DependencyType): Map<string, string> {\n return new Map(this.dependencies.get(type) || []);\n }\n\n public updateDependency(type: DependencyType, packageName: string, version: string): void {\n const typeMap = this.dependencies.get(type);\n if (typeMap) {\n typeMap.set(packageName, version);\n }\n }\n\n public filterByCatalogDependency(\n _catalogName: string,\n _packageName: string\n ): DependencyCollection {\n // This would filter dependencies that match catalog references\n // Implementation would require catalog reference information\n return this;\n }\n}\n\n/**\n * Package.json Data Interface\n */\nexport interface PackageJsonData {\n name: string;\n version?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n [key: string]: any;\n}\n\n/**\n * Package Validation Result\n */\nexport class PackageValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * Workspace Entity\n *\n * Represents a pnpm workspace with catalog configuration.\n * This is a core domain entity that encapsulates workspace business logic.\n */\n\nimport { CatalogCollection } from '../value-objects/catalogCollection.js';\nimport { PackageCollection } from '../value-objects/packageCollection.js';\nimport { WorkspaceConfig } from '../value-objects/workspaceConfig.js';\nimport { WorkspaceId } from '../value-objects/workspaceId.js';\nimport { WorkspacePath } from '../value-objects/workspacePath.js';\n\nexport class Workspace {\n private constructor(\n private readonly id: WorkspaceId,\n private readonly path: WorkspacePath,\n private config: WorkspaceConfig,\n private catalogs: CatalogCollection,\n private readonly packages: PackageCollection\n ) {}\n\n /**\n * Create a new Workspace instance\n */\n public static create(\n id: WorkspaceId,\n path: WorkspacePath,\n config: WorkspaceConfig,\n catalogs: CatalogCollection,\n packages: PackageCollection\n ): Workspace {\n return new Workspace(id, path, config, catalogs, packages);\n }\n\n /**\n * Get workspace identifier\n */\n public getId(): WorkspaceId {\n return this.id;\n }\n\n /**\n * Get workspace path\n */\n public getPath(): WorkspacePath {\n return this.path;\n }\n\n /**\n * Get workspace configuration\n */\n public getConfig(): WorkspaceConfig {\n return this.config;\n }\n\n /**\n * Get all catalogs in this workspace\n */\n public getCatalogs(): CatalogCollection {\n return this.catalogs;\n }\n\n /**\n * Get all packages in this workspace\n */\n public getPackages(): PackageCollection {\n return this.packages;\n }\n\n /**\n * Check if workspace has a specific catalog\n */\n public hasCatalog(catalogName: string): boolean {\n return this.catalogs.has(catalogName);\n }\n\n /**\n * Get packages that use a specific catalog dependency\n */\n public getPackagesUsingCatalogDependency(\n catalogName: string,\n packageName: string\n ): PackageCollection {\n return this.packages.filterByCatalogDependency(catalogName, packageName);\n }\n\n /**\n * Validate workspace consistency\n * Ensures all catalog references in packages exist in catalogs\n */\n public validateConsistency(): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check if all catalog references in packages exist\n for (const pkg of this.packages.getAll()) {\n const catalogRefs = pkg.getCatalogReferences();\n\n for (const ref of catalogRefs) {\n if (!this.catalogs.has(ref.getCatalogName())) {\n errors.push(\n `Package \"${pkg.getName()}\" references unknown catalog \"${ref.getCatalogName()}\"`\n );\n }\n\n const catalog = this.catalogs.get(ref.getCatalogName());\n if (catalog && !catalog.hasDependency(ref.getPackageName())) {\n warnings.push(\n `Package \"${pkg.getName()}\" references \"${ref.getPackageName()}\" ` +\n `from catalog \"${ref.getCatalogName()}\" but it's not defined in the catalog`\n );\n }\n }\n }\n\n return new ValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Get outdated catalog dependencies\n */\n public async getOutdatedCatalogDependencies(): Promise<OutdatedDependency[]> {\n // This would typically use a domain service to check versions\n // For now, return empty array as placeholder\n return [];\n }\n\n /**\n * Update a catalog dependency version\n */\n public updateCatalogDependency(\n catalogName: string,\n packageName: string,\n newVersion: string\n ): void {\n const catalog = this.catalogs.get(catalogName);\n if (!catalog) {\n throw new Error(`Catalog \"${catalogName}\" not found`);\n }\n\n // Update the catalog in the collection\n catalog.updateDependencyVersion(packageName, newVersion);\n\n // Also update the WorkspaceConfig to ensure consistency\n this.config = this.config.updateCatalogDependency(catalogName, packageName, newVersion);\n }\n}\n\n/**\n * Validation result value object\n */\nexport class ValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n\n/**\n * Outdated dependency value object\n */\nexport class OutdatedDependency {\n constructor(\n private readonly catalogName: string,\n private readonly packageName: string,\n private readonly currentVersion: string,\n private readonly latestVersion: string,\n private readonly updateType: 'major' | 'minor' | 'patch'\n ) {}\n\n public getCatalogName(): string {\n return this.catalogName;\n }\n\n public getPackageName(): string {\n return this.packageName;\n }\n\n public getCurrentVersion(): string {\n return this.currentVersion;\n }\n\n public getLatestVersion(): string {\n return this.latestVersion;\n }\n\n public getUpdateType(): 'major' | 'minor' | 'patch' {\n return this.updateType;\n }\n}\n","/**\n * CatalogCollection Value Object\n *\n * Represents a collection of catalogs in a workspace.\n * Provides operations for managing and querying multiple catalogs.\n */\n\nimport { Catalog, CatalogName } from '../entities/catalog.js';\n\nexport class CatalogCollection {\n private readonly catalogs: Map<CatalogName, Catalog>;\n\n private constructor(catalogs: Map<CatalogName, Catalog>) {\n this.catalogs = new Map(catalogs);\n }\n\n /**\n * Create an empty catalog collection\n */\n public static empty(): CatalogCollection {\n return new CatalogCollection(new Map());\n }\n\n /**\n * Create a catalog collection from an array of catalogs\n */\n public static fromCatalogs(catalogs: Catalog[]): CatalogCollection {\n const catalogMap = new Map<CatalogName, Catalog>();\n\n for (const catalog of catalogs) {\n catalogMap.set(catalog.getName(), catalog);\n }\n\n return new CatalogCollection(catalogMap);\n }\n\n /**\n * Create a catalog collection from a Map\n */\n public static fromMap(catalogMap: Map<CatalogName, Catalog>): CatalogCollection {\n return new CatalogCollection(catalogMap);\n }\n\n /**\n * Check if collection contains a catalog with the given name\n */\n public has(catalogName: CatalogName): boolean {\n return this.catalogs.has(catalogName);\n }\n\n /**\n * Get a catalog by name\n */\n public get(catalogName: CatalogName): Catalog | undefined {\n return this.catalogs.get(catalogName);\n }\n\n /**\n * Get all catalogs as an array\n */\n public getAll(): Catalog[] {\n return Array.from(this.catalogs.values());\n }\n\n /**\n * Get all catalog names\n */\n public getCatalogNames(): CatalogName[] {\n return Array.from(this.catalogs.keys());\n }\n\n /**\n * Get the number of catalogs\n */\n public size(): number {\n return this.catalogs.size;\n }\n\n /**\n * Check if collection is empty\n */\n public isEmpty(): boolean {\n return this.catalogs.size === 0;\n }\n\n /**\n * Add a catalog to the collection\n */\n public add(catalog: Catalog): CatalogCollection {\n const newCatalogs = new Map(this.catalogs);\n newCatalogs.set(catalog.getName(), catalog);\n return new CatalogCollection(newCatalogs);\n }\n\n /**\n * Remove a catalog from the collection\n */\n public remove(catalogName: CatalogName): CatalogCollection {\n const newCatalogs = new Map(this.catalogs);\n newCatalogs.delete(catalogName);\n return new CatalogCollection(newCatalogs);\n }\n\n /**\n * Update a catalog in the collection\n */\n public update(catalog: Catalog): CatalogCollection {\n if (!this.has(catalog.getName())) {\n throw new Error(`Catalog \"${catalog.getName()}\" not found in collection`);\n }\n\n const newCatalogs = new Map(this.catalogs);\n newCatalogs.set(catalog.getName(), catalog);\n return new CatalogCollection(newCatalogs);\n }\n\n /**\n * Get the default catalog (named 'default' or the first one)\n */\n public getDefault(): Catalog | undefined {\n // First, try to find a catalog named 'default'\n const defaultCatalog = this.catalogs.get('default');\n if (defaultCatalog) {\n return defaultCatalog;\n }\n\n // If no 'default' catalog, return the first one\n const firstCatalog = this.catalogs.values().next().value;\n return firstCatalog;\n }\n\n /**\n * Filter catalogs by a predicate function\n */\n public filter(predicate: (catalog: Catalog) => boolean): CatalogCollection {\n const filteredCatalogs = new Map<CatalogName, Catalog>();\n\n for (const [name, catalog] of this.catalogs) {\n if (predicate(catalog)) {\n filteredCatalogs.set(name, catalog);\n }\n }\n\n return new CatalogCollection(filteredCatalogs);\n }\n\n /**\n * Find catalogs that contain a specific package\n */\n public findCatalogsWithPackage(packageName: string): Catalog[] {\n return this.getAll().filter((catalog) => catalog.hasDependency(packageName));\n }\n\n /**\n * Get all unique package names across all catalogs\n */\n public getAllPackageNames(): string[] {\n const packageNames = new Set<string>();\n\n for (const catalog of this.catalogs.values()) {\n for (const packageName of catalog.getPackageNames()) {\n packageNames.add(packageName);\n }\n }\n\n return Array.from(packageNames);\n }\n\n /**\n * Validate all catalogs in the collection\n */\n public validate(): CatalogCollectionValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for empty collection\n if (this.isEmpty()) {\n warnings.push('No catalogs found in workspace');\n }\n\n // Validate each catalog\n for (const catalog of this.catalogs.values()) {\n const result = catalog.validate();\n errors.push(...result.getErrors().map((err) => `Catalog \"${catalog.getName()}\": ${err}`));\n warnings.push(\n ...result.getWarnings().map((warn) => `Catalog \"${catalog.getName()}\": ${warn}`)\n );\n }\n\n // Check for duplicate package definitions across catalogs\n const packageCatalogMap = new Map<string, string[]>();\n\n for (const catalog of this.catalogs.values()) {\n for (const packageName of catalog.getPackageNames()) {\n if (!packageCatalogMap.has(packageName)) {\n packageCatalogMap.set(packageName, []);\n }\n packageCatalogMap.get(packageName)!.push(catalog.getName());\n }\n }\n\n // Warn about packages defined in multiple catalogs\n for (const [packageName, catalogNames] of packageCatalogMap) {\n if (catalogNames.length > 1) {\n warnings.push(\n `Package \"${packageName}\" is defined in multiple catalogs: ${catalogNames.join(', ')}`\n );\n }\n }\n\n return new CatalogCollectionValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Convert to a Map for serialization\n */\n public toMap(): Map<CatalogName, Catalog> {\n return new Map(this.catalogs);\n }\n\n /**\n * Iterate over catalogs\n */\n public *[Symbol.iterator](): Iterator<[CatalogName, Catalog]> {\n yield* this.catalogs;\n }\n\n /**\n * Check equality with another catalog collection\n */\n public equals(other: CatalogCollection): boolean {\n if (this.size() !== other.size()) {\n return false;\n }\n\n for (const [name, catalog] of this.catalogs) {\n const otherCatalog = other.get(name);\n if (!otherCatalog || !catalog.equals(otherCatalog)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Catalog Collection Validation Result\n */\nexport class CatalogCollectionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * PackageCollection Value Object\n *\n * Represents a collection of packages in a workspace.\n * Provides operations for managing and querying multiple packages.\n */\n\nimport { Package, PackageName } from '../entities/package.js';\n\nexport class PackageCollection {\n private readonly packages: Map<PackageName, Package>;\n\n private constructor(packages: Map<PackageName, Package>) {\n this.packages = new Map(packages);\n }\n\n /**\n * Create an empty package collection\n */\n public static empty(): PackageCollection {\n return new PackageCollection(new Map());\n }\n\n /**\n * Create a package collection from an array of packages\n */\n public static fromPackages(packages: Package[]): PackageCollection {\n const packageMap = new Map<PackageName, Package>();\n\n for (const pkg of packages) {\n packageMap.set(pkg.getName(), pkg);\n }\n\n return new PackageCollection(packageMap);\n }\n\n /**\n * Create a package collection from a Map\n */\n public static fromMap(packageMap: Map<PackageName, Package>): PackageCollection {\n return new PackageCollection(packageMap);\n }\n\n /**\n * Check if collection contains a package with the given name\n */\n public has(packageName: PackageName): boolean {\n return this.packages.has(packageName);\n }\n\n /**\n * Get a package by name\n */\n public get(packageName: PackageName): Package | undefined {\n return this.packages.get(packageName);\n }\n\n /**\n * Get all packages as an array\n */\n public getAll(): Package[] {\n return Array.from(this.packages.values());\n }\n\n /**\n * Get all package names\n */\n public getPackageNames(): PackageName[] {\n return Array.from(this.packages.keys());\n }\n\n /**\n * Get the number of packages\n */\n public size(): number {\n return this.packages.size;\n }\n\n /**\n * Check if collection is empty\n */\n public isEmpty(): boolean {\n return this.packages.size === 0;\n }\n\n /**\n * Add a package to the collection\n */\n public add(pkg: Package): PackageCollection {\n const newPackages = new Map(this.packages);\n newPackages.set(pkg.getName(), pkg);\n return new PackageCollection(newPackages);\n }\n\n /**\n * Remove a package from the collection\n */\n public remove(packageName: PackageName): PackageCollection {\n const newPackages = new Map(this.packages);\n newPackages.delete(packageName);\n return new PackageCollection(newPackages);\n }\n\n /**\n * Update a package in the collection\n */\n public update(pkg: Package): PackageCollection {\n if (!this.has(pkg.getName())) {\n throw new Error(`Package \"${pkg.getName()}\" not found in collection`);\n }\n\n const newPackages = new Map(this.packages);\n newPackages.set(pkg.getName(), pkg);\n return new PackageCollection(newPackages);\n }\n\n /**\n * Filter packages by a predicate function\n */\n public filter(predicate: (pkg: Package) => boolean): PackageCollection {\n const filteredPackages = new Map<PackageName, Package>();\n\n for (const [name, pkg] of this.packages) {\n if (predicate(pkg)) {\n filteredPackages.set(name, pkg);\n }\n }\n\n return new PackageCollection(filteredPackages);\n }\n\n /**\n * Filter packages that use a specific catalog dependency\n */\n public filterByCatalogDependency(catalogName: string, packageName: string): PackageCollection {\n return this.filter((pkg) => pkg.usesCatalogDependency(catalogName, packageName));\n }\n\n /**\n * Find packages that have catalog references\n */\n public findPackagesWithCatalogReferences(): Package[] {\n return this.getAll().filter((pkg) => pkg.getCatalogReferences().length > 0);\n }\n\n /**\n * Find packages that reference a specific catalog\n */\n public findPackagesUsingCatalog(catalogName: string): Package[] {\n return this.getAll().filter((pkg) =>\n pkg.getCatalogReferences().some((ref) => ref.getCatalogName() === catalogName)\n );\n }\n\n /**\n * Get all unique catalog names referenced by packages\n */\n public getReferencedCatalogNames(): string[] {\n const catalogNames = new Set<string>();\n\n for (const pkg of this.packages.values()) {\n for (const ref of pkg.getCatalogReferences()) {\n catalogNames.add(ref.getCatalogName());\n }\n }\n\n return Array.from(catalogNames);\n }\n\n /**\n * Get all unique dependency names across all packages\n */\n public getAllDependencyNames(): string[] {\n const dependencyNames = new Set<string>();\n\n for (const pkg of this.packages.values()) {\n const deps = pkg.getDependencies();\n\n // Add dependencies from all types\n for (const depType of [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const) {\n for (const depName of deps.getDependenciesByType(depType).keys()) {\n dependencyNames.add(depName);\n }\n }\n }\n\n return Array.from(dependencyNames);\n }\n\n /**\n * Find packages that have a specific dependency\n */\n public findPackagesWithDependency(dependencyName: string): Package[] {\n return this.getAll().filter((pkg) => {\n const deps = pkg.getDependencies();\n return ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'].some(\n (depType) => deps.getDependenciesByType(depType as any).has(dependencyName)\n );\n });\n }\n\n /**\n * Validate all packages in the collection\n */\n public validate(): PackageCollectionValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for empty collection\n if (this.isEmpty()) {\n warnings.push('No packages found in workspace');\n }\n\n // Validate each package\n for (const pkg of this.packages.values()) {\n const result = pkg.validate();\n errors.push(...result.getErrors().map((err) => `Package \"${pkg.getName()}\": ${err}`));\n warnings.push(...result.getWarnings().map((warn) => `Package \"${pkg.getName()}\": ${warn}`));\n }\n\n // Check for duplicate package names (shouldn't happen with Map, but good to verify)\n const packageNames = this.getPackageNames();\n const uniqueNames = new Set(packageNames);\n if (packageNames.length !== uniqueNames.size) {\n errors.push('Duplicate package names found in collection');\n }\n\n return new PackageCollectionValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Group packages by workspace path\n */\n public groupByWorkspacePath(): Map<string, Package[]> {\n const grouped = new Map<string, Package[]>();\n\n for (const pkg of this.packages.values()) {\n const pathKey = pkg.getPath().toString();\n if (!grouped.has(pathKey)) {\n grouped.set(pathKey, []);\n }\n grouped.get(pathKey)!.push(pkg);\n }\n\n return grouped;\n }\n\n /**\n * Convert to a Map for serialization\n */\n public toMap(): Map<PackageName, Package> {\n return new Map(this.packages);\n }\n\n /**\n * Iterate over packages\n */\n public *[Symbol.iterator](): Iterator<[PackageName, Package]> {\n yield* this.packages;\n }\n\n /**\n * Check equality with another package collection\n */\n public equals(other: PackageCollection): boolean {\n if (this.size() !== other.size()) {\n return false;\n }\n\n for (const [name, pkg] of this.packages) {\n const otherPackage = other.get(name);\n if (!otherPackage || !pkg.equals(otherPackage)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Package Collection Validation Result\n */\nexport class PackageCollectionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * WorkspaceConfig Value Object\n *\n * Represents the configuration settings for a pnpm workspace.\n * Includes catalog mode, package patterns, and other workspace-specific settings.\n */\n\nimport { CatalogMode } from '../entities/catalog.js';\n\nexport class WorkspaceConfig {\n private readonly catalogMode: CatalogMode;\n private readonly packagePatterns: string[];\n private readonly catalogs: Map<string, CatalogDefinition>;\n private readonly shamefullyHoist: boolean;\n private readonly linkWorkspacePackages: boolean | 'deep';\n private readonly originalData: PnpmWorkspaceData;\n\n private constructor(\n catalogMode: CatalogMode,\n packagePatterns: string[],\n catalogs: Map<string, CatalogDefinition>,\n shamefullyHoist: boolean = false,\n linkWorkspacePackages: boolean | 'deep' = true,\n originalData: PnpmWorkspaceData = {} as PnpmWorkspaceData\n ) {\n this.catalogMode = catalogMode;\n this.packagePatterns = [...packagePatterns];\n this.catalogs = new Map(catalogs);\n this.shamefullyHoist = shamefullyHoist;\n this.linkWorkspacePackages = linkWorkspacePackages;\n this.originalData = { ...originalData };\n }\n\n /**\n * Create a WorkspaceConfig from pnpm-workspace.yaml data\n */\n public static fromWorkspaceData(data: PnpmWorkspaceData): WorkspaceConfig {\n const packagePatterns = data.packages || [];\n const catalogMode = data.catalogMode || CatalogMode.MANUAL;\n\n // Process catalogs\n const catalogs = new Map<string, CatalogDefinition>();\n\n // Add default catalog if exists\n if (data.catalog) {\n catalogs.set('default', new CatalogDefinition('default', data.catalog));\n }\n\n // Add named catalogs if they exist\n if (data.catalogs) {\n for (const [name, dependencies] of Object.entries(data.catalogs)) {\n catalogs.set(name, new CatalogDefinition(name, dependencies));\n }\n }\n\n return new WorkspaceConfig(\n catalogMode,\n packagePatterns,\n catalogs,\n data.shamefullyHoist,\n data.linkWorkspacePackages,\n data\n );\n }\n\n /**\n * Create a default WorkspaceConfig\n */\n public static createDefault(): WorkspaceConfig {\n const defaultData: PnpmWorkspaceData = {\n packages: ['packages/*'],\n };\n return new WorkspaceConfig(\n CatalogMode.MANUAL,\n ['packages/*'],\n new Map(),\n false,\n true,\n defaultData\n );\n }\n\n /**\n * Get catalog mode\n */\n public getCatalogMode(): CatalogMode {\n return this.catalogMode;\n }\n\n /**\n * Get package patterns\n */\n public getPackagePatterns(): string[] {\n return [...this.packagePatterns];\n }\n\n /**\n * Get catalog definitions\n */\n public getCatalogDefinitions(): Map<string, CatalogDefinition> {\n return new Map(this.catalogs);\n }\n\n /**\n * Get a specific catalog definition\n */\n public getCatalogDefinition(name: string): CatalogDefinition | undefined {\n return this.catalogs.get(name);\n }\n\n /**\n * Check if a catalog is defined\n */\n public hasCatalog(name: string): boolean {\n return this.catalogs.has(name);\n }\n\n /**\n * Get all catalog names\n */\n public getCatalogNames(): string[] {\n return Array.from(this.catalogs.keys());\n }\n\n /**\n * Check if shamefully hoist is enabled\n */\n public isShamefullyHoist(): boolean {\n return this.shamefullyHoist;\n }\n\n /**\n * Get link workspace packages setting\n */\n public getLinkWorkspacePackages(): boolean | 'deep' {\n return this.linkWorkspacePackages;\n }\n\n /**\n * Check if workspace has any catalogs\n */\n public hasCatalogs(): boolean {\n return this.catalogs.size > 0;\n }\n\n /**\n * Update a catalog dependency (creates a new WorkspaceConfig)\n */\n public updateCatalogDependency(\n catalogName: string,\n packageName: string,\n version: string\n ): WorkspaceConfig {\n const catalogDef = this.catalogs.get(catalogName);\n if (!catalogDef) {\n throw new Error(`Catalog \"${catalogName}\" not found`);\n }\n\n // Create updated catalog definition\n const updatedCatalogDef = catalogDef.updateDependencyVersion(packageName, version);\n\n // Create new catalogs map with the updated definition\n const updatedCatalogs = new Map(this.catalogs);\n updatedCatalogs.set(catalogName, updatedCatalogDef);\n\n // Return new WorkspaceConfig instance\n return new WorkspaceConfig(\n this.catalogMode,\n this.packagePatterns,\n updatedCatalogs,\n this.shamefullyHoist,\n this.linkWorkspacePackages,\n this.originalData\n );\n }\n\n /**\n * Get the default catalog definition\n */\n public getDefaultCatalog(): CatalogDefinition | undefined {\n return this.catalogs.get('default');\n }\n\n /**\n * Validate workspace configuration\n */\n public validate(): WorkspaceConfigValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate package patterns\n if (this.packagePatterns.length === 0) {\n warnings.push('No package patterns defined - workspace may not discover any packages');\n }\n\n // Validate package patterns format\n for (const pattern of this.packagePatterns) {\n if (!pattern || pattern.trim().length === 0) {\n errors.push('Empty package pattern found');\n }\n\n // Basic glob pattern validation\n if (pattern.includes('**') && pattern.indexOf('**') !== pattern.lastIndexOf('**')) {\n warnings.push(`Complex glob pattern may be inefficient: ${pattern}`);\n }\n }\n\n // Validate catalog definitions\n for (const [name, catalogDef] of this.catalogs) {\n const validationResult = catalogDef.validate();\n errors.push(...validationResult.getErrors().map((err) => `Catalog \"${name}\": ${err}`));\n warnings.push(...validationResult.getWarnings().map((warn) => `Catalog \"${name}\": ${warn}`));\n }\n\n // Check for conflicting settings\n if (this.catalogMode === CatalogMode.STRICT && this.catalogs.size === 0) {\n errors.push('Catalog mode is set to \"strict\" but no catalogs are defined');\n }\n\n return new WorkspaceConfigValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Convert to pnpm-workspace.yaml data format\n */\n public toPnpmWorkspaceData(): PnpmWorkspaceData {\n // Start with the original data to preserve all fields\n const data: PnpmWorkspaceData = { ...this.originalData };\n\n // Update the fields that we manage\n data.packages = this.packagePatterns;\n\n // Add catalog mode if not default\n if (this.catalogMode !== CatalogMode.MANUAL) {\n data.catalogMode = this.catalogMode;\n } else {\n // Remove catalogMode if it's back to default\n delete data.catalogMode;\n }\n\n // Update catalogs\n const defaultCatalog = this.catalogs.get('default');\n if (defaultCatalog) {\n data.catalog = defaultCatalog.getDependencies();\n } else {\n // Remove catalog if it no longer exists\n delete data.catalog;\n }\n\n const namedCatalogs: Record<string, Record<string, string>> = {};\n for (const [name, catalogDef] of this.catalogs) {\n if (name !== 'default') {\n namedCatalogs[name] = catalogDef.getDependencies();\n }\n }\n\n if (Object.keys(namedCatalogs).length > 0) {\n data.catalogs = namedCatalogs;\n } else {\n // Remove catalogs if none exist\n delete data.catalogs;\n }\n\n // Update other settings\n if (this.shamefullyHoist) {\n data.shamefullyHoist = this.shamefullyHoist;\n } else {\n // Remove if false/default\n delete data.shamefullyHoist;\n }\n\n if (this.linkWorkspacePackages !== true) {\n data.linkWorkspacePackages = this.linkWorkspacePackages;\n } else {\n // Remove if true/default\n delete data.linkWorkspacePackages;\n }\n\n return data;\n }\n\n /**\n * Check equality with another WorkspaceConfig\n */\n public equals(other: WorkspaceConfig): boolean {\n return (\n this.catalogMode === other.catalogMode &&\n JSON.stringify(this.packagePatterns) === JSON.stringify(other.packagePatterns) &&\n this.shamefullyHoist === other.shamefullyHoist &&\n this.linkWorkspacePackages === other.linkWorkspacePackages &&\n this.catalogsEqual(other.catalogs)\n );\n }\n\n /**\n * Check if catalog definitions are equal\n */\n private catalogsEqual(otherCatalogs: Map<string, CatalogDefinition>): boolean {\n if (this.catalogs.size !== otherCatalogs.size) {\n return false;\n }\n\n for (const [name, catalogDef] of this.catalogs) {\n const otherCatalogDef = otherCatalogs.get(name);\n if (!otherCatalogDef || !catalogDef.equals(otherCatalogDef)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Catalog Definition Value Object\n */\nexport class CatalogDefinition {\n private readonly name: string;\n private readonly dependencies: Record<string, string>;\n\n constructor(name: string, dependencies: Record<string, string>) {\n this.name = name;\n this.dependencies = { ...dependencies };\n }\n\n public getName(): string {\n return this.name;\n }\n\n public getDependencies(): Record<string, string> {\n return { ...this.dependencies };\n }\n\n public getDependencyNames(): string[] {\n return Object.keys(this.dependencies);\n }\n\n public hasDependency(packageName: string): boolean {\n return packageName in this.dependencies;\n }\n\n public getDependencyVersion(packageName: string): string | undefined {\n return this.dependencies[packageName];\n }\n\n /**\n * Update a dependency version (returns a new instance)\n */\n public updateDependencyVersion(packageName: string, version: string): CatalogDefinition {\n const updatedDependencies = { ...this.dependencies };\n updatedDependencies[packageName] = version;\n return new CatalogDefinition(this.name, updatedDependencies);\n }\n\n public validate(): CatalogDefinitionValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate name\n if (!this.name || this.name.trim().length === 0) {\n errors.push('Catalog name cannot be empty');\n }\n\n // Validate dependencies\n for (const [packageName, version] of Object.entries(this.dependencies)) {\n if (!packageName || packageName.trim().length === 0) {\n errors.push('Package name cannot be empty');\n }\n\n if (!version || version.trim().length === 0) {\n errors.push(`Version for package \"${packageName}\" cannot be empty`);\n }\n\n // Basic package name validation\n if (!/^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(packageName)) {\n warnings.push(`Package name \"${packageName}\" may not be valid`);\n }\n }\n\n return new CatalogDefinitionValidationResult(errors.length === 0, errors, warnings);\n }\n\n public equals(other: CatalogDefinition): boolean {\n return (\n this.name === other.name &&\n JSON.stringify(this.dependencies) === JSON.stringify(other.dependencies)\n );\n }\n}\n\n/**\n * pnpm-workspace.yaml data interface\n */\nexport interface PnpmWorkspaceData {\n packages: string[];\n catalog?: Record<string, string>;\n catalogs?: Record<string, Record<string, string>>;\n catalogMode?: CatalogMode;\n shamefullyHoist?: boolean;\n linkWorkspacePackages?: boolean | 'deep';\n [key: string]: any;\n}\n\n/**\n * Workspace Config Validation Result\n */\nexport class WorkspaceConfigValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n\n/**\n * Catalog Definition Validation Result\n */\nexport class CatalogDefinitionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * WorkspaceId Value Object\n *\n * Represents a unique identifier for a pnpm workspace.\n * This is an immutable value object that ensures workspace identity.\n */\n\nexport class WorkspaceId {\n private readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n /**\n * Create a WorkspaceId from a string value\n */\n public static fromString(value: string): WorkspaceId {\n if (!value || value.trim().length === 0) {\n throw new Error('WorkspaceId cannot be empty');\n }\n\n if (value.length > 255) {\n throw new Error('WorkspaceId cannot exceed 255 characters');\n }\n\n // Validate format - alphanumeric, hyphens, underscores only\n const validPattern = /^[a-zA-Z0-9_-]+$/;\n if (!validPattern.test(value.trim())) {\n throw new Error(\n 'WorkspaceId can only contain alphanumeric characters, hyphens, and underscores'\n );\n }\n\n return new WorkspaceId(value.trim());\n }\n\n /**\n * Generate a new unique WorkspaceId\n */\n public static generate(): WorkspaceId {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return new WorkspaceId(`workspace-${timestamp}-${random}`);\n }\n\n /**\n * Create a WorkspaceId from a workspace path\n */\n public static fromPath(path: string): WorkspaceId {\n // Extract a meaningful identifier from the path\n const normalizedPath = path.replace(/\\\\/g, '/');\n const pathParts = normalizedPath.split('/').filter(Boolean);\n const lastPart = pathParts[pathParts.length - 1] || 'workspace';\n\n // Sanitize the path part to create a valid ID\n const sanitized = lastPart\n .replace(/[^a-zA-Z0-9_-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n\n if (sanitized.length === 0) {\n return WorkspaceId.generate();\n }\n\n return new WorkspaceId(sanitized);\n }\n\n /**\n * Get the string value of this WorkspaceId\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Get the raw value\n */\n public getValue(): string {\n return this.value;\n }\n\n /**\n * Check equality with another WorkspaceId\n */\n public equals(other: WorkspaceId): boolean {\n return this.value === other.value;\n }\n\n /**\n * Check if this WorkspaceId is the same as another\n */\n public isSameAs(other: WorkspaceId): boolean {\n return this.equals(other);\n }\n\n /**\n * Get a hash code for this WorkspaceId\n */\n public hashCode(): number {\n let hash = 0;\n for (let i = 0; i < this.value.length; i++) {\n const char = this.value.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return hash;\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): WorkspaceId {\n return WorkspaceId.fromString(json);\n }\n}\n","/**\n * Cache System\n *\n * Provides caching capabilities for NPM registry responses and other expensive operations.\n * Supports both in-memory and file-based caching with TTL and size limits.\n */\n\nimport { createHash } from 'crypto';\nimport { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'fs';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\nexport interface CacheEntry<T = any> {\n key: string;\n value: T;\n timestamp: number;\n ttl: number; // Time to live in milliseconds\n size: number; // Estimated size in bytes\n}\n\nexport interface CacheOptions {\n ttl?: number; // Default TTL in milliseconds\n maxSize?: number; // Max total cache size in bytes\n maxEntries?: number; // Max number of entries\n persistToDisk?: boolean; // Whether to persist cache to disk\n cacheDir?: string; // Directory for file-based cache\n}\n\nexport interface CacheStats {\n totalEntries: number;\n totalSize: number;\n hitRate: number;\n missRate: number;\n hits: number;\n misses: number;\n}\n\nexport class Cache<T = any> {\n private entries = new Map<string, CacheEntry<T>>();\n private stats = {\n hits: 0,\n misses: 0,\n };\n\n private options: Required<CacheOptions>;\n\n constructor(name: string, options: CacheOptions = {}) {\n this.options = {\n ttl: options.ttl || 3600000, // 1 hour default\n maxSize: options.maxSize || 50 * 1024 * 1024, // 50MB default\n maxEntries: options.maxEntries || 1000,\n persistToDisk: options.persistToDisk || false,\n cacheDir: options.cacheDir || join(homedir(), '.pcu', 'cache', name),\n };\n\n if (this.options.persistToDisk) {\n this.loadFromDisk();\n }\n\n // Setup cleanup interval\n setInterval(() => this.cleanup(), 300000); // Clean every 5 minutes\n }\n\n /**\n * Get value from cache\n */\n get(key: string): T | undefined {\n const entry = this.entries.get(key);\n\n if (!entry) {\n this.stats.misses++;\n return undefined;\n }\n\n // Check if entry has expired\n if (Date.now() - entry.timestamp > entry.ttl) {\n this.entries.delete(key);\n this.stats.misses++;\n return undefined;\n }\n\n this.stats.hits++;\n return entry.value;\n }\n\n /**\n * Set value in cache\n */\n set(key: string, value: T, ttl?: number): void {\n const entryTtl = ttl || this.options.ttl;\n const size = this.estimateSize(value);\n\n const entry: CacheEntry<T> = {\n key,\n value,\n timestamp: Date.now(),\n ttl: entryTtl,\n size,\n };\n\n // Remove old entry if exists\n if (this.entries.has(key)) {\n this.entries.delete(key);\n }\n\n // Check size limits before adding\n this.ensureCapacity(size);\n\n this.entries.set(key, entry);\n\n if (this.options.persistToDisk) {\n this.saveToDisk(key, entry);\n }\n }\n\n /**\n * Check if key exists in cache\n */\n has(key: string): boolean {\n const entry = this.entries.get(key);\n\n if (!entry) {\n return false;\n }\n\n // Check if expired\n if (Date.now() - entry.timestamp > entry.ttl) {\n this.entries.delete(key);\n return false;\n }\n\n return true;\n }\n\n /**\n * Delete entry from cache\n */\n delete(key: string): boolean {\n const deleted = this.entries.delete(key);\n\n if (deleted && this.options.persistToDisk) {\n this.deleteFromDisk(key);\n }\n\n return deleted;\n }\n\n /**\n * Clear all cache entries\n */\n clear(): void {\n this.entries.clear();\n this.stats.hits = 0;\n this.stats.misses = 0;\n\n if (this.options.persistToDisk) {\n this.clearDisk();\n }\n }\n\n /**\n * Get cache statistics\n */\n getStats(): CacheStats {\n const total = this.stats.hits + this.stats.misses;\n\n return {\n totalEntries: this.entries.size,\n totalSize: this.getTotalSize(),\n hitRate: total > 0 ? this.stats.hits / total : 0,\n missRate: total > 0 ? this.stats.misses / total : 0,\n hits: this.stats.hits,\n misses: this.stats.misses,\n };\n }\n\n /**\n * Get or set with factory function\n */\n async getOrSet(key: string, factory: () => Promise<T> | T, ttl?: number): Promise<T> {\n const cached = this.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const value = await factory();\n this.set(key, value, ttl);\n\n return value;\n }\n\n /**\n * Cleanup expired entries\n */\n private cleanup(): void {\n const now = Date.now();\n const expiredKeys: string[] = [];\n\n for (const [key, entry] of this.entries) {\n if (now - entry.timestamp > entry.ttl) {\n expiredKeys.push(key);\n }\n }\n\n for (const key of expiredKeys) {\n this.delete(key);\n }\n }\n\n /**\n * Ensure cache capacity doesn't exceed limits\n */\n private ensureCapacity(newEntrySize: number): void {\n // Check entry count limit\n while (this.entries.size >= this.options.maxEntries) {\n this.evictOldest();\n }\n\n // Check size limit\n while (this.getTotalSize() + newEntrySize > this.options.maxSize) {\n this.evictOldest();\n }\n }\n\n /**\n * Evict oldest entry\n */\n private evictOldest(): void {\n let oldestKey: string | undefined;\n let oldestTimestamp = Date.now();\n\n for (const [key, entry] of this.entries) {\n if (entry.timestamp < oldestTimestamp) {\n oldestTimestamp = entry.timestamp;\n oldestKey = key;\n }\n }\n\n if (oldestKey) {\n this.delete(oldestKey);\n }\n }\n\n /**\n * Get total cache size\n */\n private getTotalSize(): number {\n let totalSize = 0;\n for (const entry of this.entries.values()) {\n totalSize += entry.size;\n }\n return totalSize;\n }\n\n /**\n * Estimate size of value in bytes\n */\n private estimateSize(value: T): number {\n try {\n return JSON.stringify(value).length * 2; // Rough UTF-16 estimate\n } catch {\n return 1000; // Default estimate for non-serializable values\n }\n }\n\n /**\n * Load cache from disk\n */\n private loadFromDisk(): void {\n try {\n if (!existsSync(this.options.cacheDir)) {\n return;\n }\n\n const indexPath = join(this.options.cacheDir, 'index.json');\n if (!existsSync(indexPath)) {\n return;\n }\n\n const indexContent = readFileSync(indexPath, 'utf-8');\n const index = JSON.parse(indexContent);\n\n for (const key of index.keys || []) {\n try {\n const entryPath = join(this.options.cacheDir, this.getFilename(key));\n if (existsSync(entryPath)) {\n const entryContent = readFileSync(entryPath, 'utf-8');\n const entry = JSON.parse(entryContent);\n\n // Check if entry is still valid\n if (Date.now() - entry.timestamp <= entry.ttl) {\n this.entries.set(key, entry);\n }\n }\n } catch {\n // Skip corrupted entries\n }\n }\n } catch {\n // Ignore disk loading errors\n }\n }\n\n /**\n * Save entry to disk\n */\n private saveToDisk(key: string, entry: CacheEntry<T>): void {\n try {\n if (!existsSync(this.options.cacheDir)) {\n mkdirSync(this.options.cacheDir, { recursive: true });\n }\n\n const entryPath = join(this.options.cacheDir, this.getFilename(key));\n writeFileSync(entryPath, JSON.stringify(entry), 'utf-8');\n\n // Update index\n this.updateDiskIndex();\n } catch {\n // Ignore disk saving errors\n }\n }\n\n /**\n * Delete entry from disk\n */\n private deleteFromDisk(key: string): void {\n try {\n const entryPath = join(this.options.cacheDir, this.getFilename(key));\n if (existsSync(entryPath)) {\n unlinkSync(entryPath);\n }\n this.updateDiskIndex();\n } catch {\n // Ignore disk deletion errors\n }\n }\n\n /**\n * Clear disk cache\n */\n private clearDisk(): void {\n try {\n if (existsSync(this.options.cacheDir)) {\n const fs = require('fs');\n fs.rmSync(this.options.cacheDir, { recursive: true, force: true });\n }\n } catch {\n // Ignore disk clearing errors\n }\n }\n\n /**\n * Update disk index\n */\n private updateDiskIndex(): void {\n try {\n const indexPath = join(this.options.cacheDir, 'index.json');\n const index = {\n keys: Array.from(this.entries.keys()),\n lastUpdated: Date.now(),\n };\n writeFileSync(indexPath, JSON.stringify(index), 'utf-8');\n } catch {\n // Ignore index update errors\n }\n }\n\n /**\n * Get filename for cache key\n */\n private getFilename(key: string): string {\n // Use hash to create safe filename\n const hash = createHash('md5').update(key).digest('hex');\n return `${hash}.json`;\n }\n}\n\n/**\n * Registry-specific cache for NPM API responses\n */\nexport class RegistryCache extends Cache<any> {\n constructor(options: CacheOptions = {}) {\n super('registry', {\n ttl: 3600000, // 1 hour\n maxSize: 10 * 1024 * 1024, // 10MB\n maxEntries: 500,\n persistToDisk: true,\n ...options,\n });\n }\n\n /**\n * Cache package info\n */\n setPackageInfo(packageName: string, info: any, ttl?: number): void {\n this.set(`package:${packageName}`, info, ttl);\n }\n\n /**\n * Get cached package info\n */\n getPackageInfo(packageName: string): any | undefined {\n return this.get(`package:${packageName}`);\n }\n\n /**\n * Cache version list\n */\n setVersions(packageName: string, versions: string[], ttl?: number): void {\n this.set(`versions:${packageName}`, versions, ttl);\n }\n\n /**\n * Get cached versions\n */\n getVersions(packageName: string): string[] | undefined {\n return this.get(`versions:${packageName}`);\n }\n\n /**\n * Cache security report\n */\n setSecurityReport(packageName: string, version: string, report: any, ttl?: number): void {\n this.set(`security:${packageName}:${version}`, report, ttl);\n }\n\n /**\n * Get cached security report\n */\n getSecurityReport(packageName: string, version: string): any | undefined {\n return this.get(`security:${packageName}:${version}`);\n }\n}\n\n/**\n * Workspace-specific cache for file system operations\n */\nexport class WorkspaceCache extends Cache<any> {\n constructor(options: CacheOptions = {}) {\n super('workspace', {\n ttl: 300000, // 5 minutes (shorter TTL for file system)\n maxSize: 5 * 1024 * 1024, // 5MB\n maxEntries: 200,\n persistToDisk: false, // Don't persist workspace cache\n ...options,\n });\n }\n\n /**\n * Cache workspace info\n */\n setWorkspaceInfo(workspacePath: string, info: any, ttl?: number): void {\n this.set(`workspace:${workspacePath}`, info, ttl);\n }\n\n /**\n * Get cached workspace info\n */\n getWorkspaceInfo(workspacePath: string): any | undefined {\n return this.get(`workspace:${workspacePath}`);\n }\n\n /**\n * Cache package.json content\n */\n setPackageJson(filePath: string, content: any, ttl?: number): void {\n this.set(`package-json:${filePath}`, content, ttl);\n }\n\n /**\n * Get cached package.json\n */\n getPackageJson(filePath: string): any | undefined {\n return this.get(`package-json:${filePath}`);\n }\n}\n\n// Export singleton instances\nexport const registryCache = new RegistryCache();\nexport const workspaceCache = new WorkspaceCache();\n","/**\n * File System Service\n *\n * Provides abstracted file system operations for the application.\n * Handles reading/writing workspace files, package.json, and pnpm-workspace.yaml.\n */\n\nimport fs from 'fs/promises';\nimport { glob } from 'glob';\nimport path from 'path';\nimport YAML from 'yaml';\nimport { PackageJsonData } from '../../domain/entities/package.js';\nimport { PnpmWorkspaceData } from '../../domain/value-objects/workspaceConfig.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\n\nexport class FileSystemService {\n /**\n * Check if a file exists\n */\n async exists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Check if a path is a directory\n */\n async isDirectory(dirPath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(dirPath);\n return stat.isDirectory();\n } catch {\n return false;\n }\n }\n\n /**\n * Read a text file\n */\n async readTextFile(filePath: string): Promise<string> {\n try {\n return await fs.readFile(filePath, 'utf-8');\n } catch (error) {\n throw new Error(`Failed to read file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a text file\n */\n async writeTextFile(filePath: string, content: string): Promise<void> {\n try {\n // Ensure directory exists\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, content, 'utf-8');\n } catch (error) {\n throw new Error(`Failed to write file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Read and parse a JSON file\n */\n async readJsonFile<T = any>(filePath: string): Promise<T> {\n try {\n const content = await this.readTextFile(filePath);\n return JSON.parse(content) as T;\n } catch (error) {\n throw new Error(`Failed to read JSON file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a JSON file\n */\n async writeJsonFile(filePath: string, data: any, indent: number = 2): Promise<void> {\n try {\n const content = JSON.stringify(data, null, indent);\n await this.writeTextFile(filePath, content);\n } catch (error) {\n throw new Error(`Failed to write JSON file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Read and parse a YAML file\n */\n async readYamlFile<T = any>(filePath: string): Promise<T> {\n try {\n const content = await this.readTextFile(filePath);\n return YAML.parse(content) as T;\n } catch (error) {\n throw new Error(`Failed to read YAML file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a YAML file\n */\n async writeYamlFile(filePath: string, data: any): Promise<void> {\n try {\n const content = YAML.stringify(data, {\n indent: 2,\n });\n await this.writeTextFile(filePath, content);\n } catch (error) {\n throw new Error(`Failed to write YAML file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a YAML file while preserving comments and formatting\n */\n async writeYamlFilePreservingFormat(filePath: string, data: any): Promise<void> {\n try {\n // Read the original file to preserve comments and formatting\n const originalContent = await this.readTextFile(filePath);\n\n // Use smart YAML updating that preserves comments and formatting\n const updatedContent = this.updateYamlPreservingFormat(originalContent, data);\n\n await this.writeTextFile(filePath, updatedContent);\n } catch (error) {\n // If reading the original file fails, fall back to regular YAML writing\n console.warn(\n `Could not preserve YAML format for ${filePath}, falling back to standard formatting`\n );\n await this.writeYamlFile(filePath, data);\n }\n }\n\n /**\n * Update YAML content while preserving comments and formatting\n */\n private updateYamlPreservingFormat(originalContent: string, newData: any): string {\n const lines = originalContent.split('\\n');\n const result: string[] = [];\n let i = 0;\n\n // Helper function to update a specific section\n const updateSection = (sectionName: string, newValue: any): boolean => {\n if (!(sectionName in newData)) {\n return false;\n }\n\n // Find the section in the original content\n let sectionStartIndex = -1;\n let sectionEndIndex = -1;\n let indentLevel = 0;\n\n for (let j = i; j < lines.length; j++) {\n const fullLine = lines[j];\n if (!fullLine) continue;\n\n const line = fullLine.trim();\n\n if (line.startsWith(`${sectionName}:`)) {\n sectionStartIndex = j;\n indentLevel = fullLine.length - fullLine.trimStart().length;\n\n // Find the end of this section\n for (let k = j + 1; k < lines.length; k++) {\n const nextLine = lines[k];\n if (!nextLine) continue;\n\n const nextLineTrimmed = nextLine.trim();\n const nextIndentLevel = nextLine.length - nextLine.trimStart().length;\n\n // If we find a line with same or less indentation that defines a new section, stop\n if (\n nextIndentLevel <= indentLevel &&\n nextLineTrimmed.includes(':') &&\n !nextLineTrimmed.startsWith('#')\n ) {\n sectionEndIndex = k - 1;\n break;\n }\n\n // If we find a line that's not empty, not indented enough to be part of this section, stop\n // Special case: comments at the same level after an empty line should end the section\n if (nextLineTrimmed !== '' && nextIndentLevel <= indentLevel) {\n if (nextLineTrimmed.startsWith('#') && nextIndentLevel === indentLevel) {\n // Check if there was an empty line before this comment\n let hasEmptyLineBefore = false;\n for (let m = k - 1; m > j; m--) {\n const prevLine = lines[m];\n if (!prevLine || prevLine.trim() === '') {\n hasEmptyLineBefore = true;\n break;\n }\n if (prevLine.trim() !== '') {\n break;\n }\n }\n if (hasEmptyLineBefore) {\n sectionEndIndex = k - 1;\n break;\n }\n } else if (!nextLineTrimmed.startsWith('#')) {\n sectionEndIndex = k - 1;\n break;\n }\n }\n }\n\n if (sectionEndIndex === -1) {\n sectionEndIndex = lines.length - 1;\n }\n break;\n }\n }\n\n if (sectionStartIndex !== -1) {\n // Update the section\n const sectionContent = this.formatYamlSection(\n sectionName,\n newValue,\n indentLevel,\n lines,\n sectionStartIndex,\n sectionEndIndex\n );\n\n // Add lines before the section\n for (let j = i; j < sectionStartIndex; j++) {\n const lineContent = lines[j];\n if (lineContent !== undefined) {\n result.push(lineContent);\n }\n }\n\n // Add the updated section\n result.push(...sectionContent);\n\n // Update the position to after this section\n i = sectionEndIndex + 1;\n return true;\n }\n\n return false;\n };\n\n // Process the file line by line\n while (i < lines.length) {\n const currentLine = lines[i];\n if (!currentLine) {\n result.push('');\n i++;\n continue;\n }\n\n const line = currentLine.trim();\n\n // Handle main sections\n if (line.startsWith('packages:')) {\n if (updateSection('packages', newData.packages)) {\n continue;\n }\n } else if (line.startsWith('catalog:')) {\n if (updateSection('catalog', newData.catalog)) {\n continue;\n }\n } else if (line.startsWith('catalogs:')) {\n if (updateSection('catalogs', newData.catalogs)) {\n continue;\n }\n } else if (line.startsWith('catalogMode:')) {\n if ('catalogMode' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length;\n result.push(' '.repeat(indent) + `catalogMode: ${newData.catalogMode}`);\n i++;\n continue;\n }\n } else if (line.startsWith('shamefullyHoist:')) {\n if ('shamefullyHoist' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length;\n result.push(' '.repeat(indent) + `shamefullyHoist: ${newData.shamefullyHoist}`);\n i++;\n continue;\n }\n } else if (line.startsWith('linkWorkspacePackages:')) {\n if ('linkWorkspacePackages' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length;\n result.push(\n ' '.repeat(indent) + `linkWorkspacePackages: ${newData.linkWorkspacePackages}`\n );\n i++;\n continue;\n }\n }\n\n // Keep the original line if not updated\n result.push(currentLine);\n i++;\n }\n\n return result.join('\\n');\n }\n\n /**\n * Format a YAML section with proper indentation while preserving internal structure\n */\n private formatYamlSection(\n sectionName: string,\n value: any,\n baseIndent: number = 0,\n originalLines?: string[],\n sectionStart?: number,\n sectionEnd?: number\n ): string[] {\n const lines: string[] = [];\n const indent = ' '.repeat(baseIndent);\n\n if (sectionName === 'packages' && Array.isArray(value)) {\n lines.push(`${indent}packages:`);\n for (const pkg of value) {\n lines.push(`${indent} - \"${pkg}\"`);\n }\n } else if (\n (sectionName === 'catalog' || sectionName === 'catalogs') &&\n typeof value === 'object'\n ) {\n if (sectionName === 'catalog') {\n lines.push(`${indent}catalog:`);\n\n // Try to preserve original structure and comments if available\n if (originalLines && sectionStart !== undefined && sectionEnd !== undefined) {\n const valueEntries = Object.entries(value);\n const processedPackages = new Set<string>();\n\n // First pass: update existing packages while preserving comments\n for (let i = sectionStart + 1; i <= sectionEnd; i++) {\n const line = originalLines[i];\n if (!line) continue;\n\n const trimmed = line.trim();\n\n // Preserve comments and empty lines\n if (trimmed.startsWith('#') || trimmed === '') {\n lines.push(line);\n continue;\n }\n\n // Check if this line defines a package (with or without quotes)\n const packageMatch = trimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/);\n if (packageMatch && packageMatch[2]) {\n const packageName = packageMatch[2];\n const newVersion = value[packageName];\n\n if (newVersion !== undefined) {\n // Update with new version while preserving indentation and quotes\n const originalIndent = line.length - line.trimStart().length;\n const quote = packageMatch[1] || ''; // Preserve original quote style\n lines.push(\n ' '.repeat(originalIndent) + `${quote}${packageName}${quote}: ${newVersion}`\n );\n processedPackages.add(packageName);\n } else {\n // Keep the line as is if package not in new data\n lines.push(line);\n }\n } else {\n // Keep other lines as is\n lines.push(line);\n }\n }\n\n // Second pass: add any new packages that weren't in the original\n for (const [pkg, version] of valueEntries) {\n if (!processedPackages.has(pkg)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n } else {\n // Fallback to simple formatting\n for (const [pkg, version] of Object.entries(value)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n } else {\n // Handle catalogs section with format preservation\n lines.push(`${indent}catalogs:`);\n\n if (originalLines && sectionStart !== undefined && sectionEnd !== undefined) {\n // Try to preserve original structure for catalogs section\n this.formatCatalogsSection(\n lines,\n value,\n baseIndent,\n originalLines,\n sectionStart,\n sectionEnd\n );\n } else {\n // Fallback to simple formatting\n for (const [catalogName, catalog] of Object.entries(value as Record<string, any>)) {\n lines.push(`${indent} ${catalogName}:`);\n for (const [pkg, version] of Object.entries(catalog)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n }\n }\n }\n\n return lines;\n }\n\n /**\n * Format catalogs section while preserving structure and comments\n */\n private formatCatalogsSection(\n lines: string[],\n value: Record<string, any>,\n baseIndent: number,\n originalLines: string[],\n sectionStart: number,\n sectionEnd: number\n ): void {\n const indent = ' '.repeat(baseIndent);\n const processedCatalogs = new Set<string>();\n\n let i = sectionStart + 1;\n while (i <= sectionEnd) {\n const line = originalLines[i];\n if (!line) {\n i++;\n continue;\n }\n\n const trimmed = line.trim();\n\n // Preserve comments and empty lines\n if (trimmed.startsWith('#') || trimmed === '') {\n lines.push(line);\n i++;\n continue;\n }\n\n // Check if this line defines a catalog\n const catalogMatch = trimmed.match(/^([a-zA-Z0-9\\-_.]+):\\s*$/);\n if (catalogMatch && catalogMatch[1]) {\n const catalogName = catalogMatch[1];\n const catalogData = value[catalogName];\n\n if (catalogData) {\n // This catalog exists in the new data\n const originalIndent = line.length - line.trimStart().length;\n lines.push(' '.repeat(originalIndent) + `${catalogName}:`);\n processedCatalogs.add(catalogName);\n\n // Process packages within this catalog\n i++;\n while (i <= sectionEnd) {\n const packageLine = originalLines[i];\n if (!packageLine) {\n i++;\n continue;\n }\n\n const packageTrimmed = packageLine.trim();\n const packageIndent = packageLine.length - packageLine.trimStart().length;\n\n // If we hit another catalog or section at same/lesser indent, break\n if (\n packageIndent <= originalIndent &&\n packageTrimmed !== '' &&\n !packageTrimmed.startsWith('#')\n ) {\n break;\n }\n\n // Preserve comments and empty lines\n if (packageTrimmed.startsWith('#') || packageTrimmed === '') {\n lines.push(packageLine);\n i++;\n continue;\n }\n\n // Check if this line defines a package\n const packageMatch = packageTrimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/);\n if (packageMatch && packageMatch[2]) {\n const packageName = packageMatch[2];\n const newVersion = catalogData[packageName];\n\n if (newVersion !== undefined) {\n // Update with new version while preserving indentation and quotes\n const quote = packageMatch[1] || '';\n lines.push(\n ' '.repeat(packageIndent) + `${quote}${packageName}${quote}: ${newVersion}`\n );\n } else {\n // Keep the line as is if package not in new data\n lines.push(packageLine);\n }\n } else {\n // Keep other lines as is\n lines.push(packageLine);\n }\n\n i++;\n }\n\n // Add any new packages that weren't in the original\n for (const [pkg, version] of Object.entries(catalogData)) {\n if (\n !this.packageExistsInCatalogSection(\n originalLines,\n sectionStart,\n sectionEnd,\n catalogName,\n pkg\n )\n ) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n } else {\n // This catalog doesn't exist in new data, keep as is\n lines.push(line);\n i++;\n }\n } else {\n // Not a catalog definition, keep as is\n lines.push(line);\n i++;\n }\n }\n\n // Add any new catalogs that weren't in the original\n for (const [catalogName, catalogData] of Object.entries(value)) {\n if (!processedCatalogs.has(catalogName)) {\n lines.push(`${indent} ${catalogName}:`);\n for (const [pkg, version] of Object.entries(catalogData)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n }\n }\n\n /**\n * Check if a package exists in a catalog section\n */\n private packageExistsInCatalogSection(\n lines: string[],\n sectionStart: number,\n sectionEnd: number,\n catalogName: string,\n packageName: string\n ): boolean {\n let foundCatalog = false;\n\n for (let i = sectionStart + 1; i <= sectionEnd; i++) {\n const line = lines[i];\n if (!line) continue;\n\n const trimmed = line.trim();\n\n // Check if we found the catalog\n if (trimmed === `${catalogName}:`) {\n foundCatalog = true;\n continue;\n }\n\n // If we found another catalog, stop\n if (foundCatalog && trimmed.match(/^[a-zA-Z0-9\\-_.]+:\\s*$/)) {\n break;\n }\n\n // If we're in the right catalog, check for the package\n if (foundCatalog) {\n const packageMatch = trimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/);\n if (packageMatch && packageMatch[2] === packageName) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Read pnpm-workspace.yaml configuration\n */\n async readPnpmWorkspaceConfig(workspacePath: WorkspacePath): Promise<PnpmWorkspaceData> {\n const configPath = workspacePath.getPnpmWorkspaceConfigPath().toString();\n\n if (!(await this.exists(configPath))) {\n throw new Error(`pnpm-workspace.yaml not found at ${configPath}`);\n }\n\n return await this.readYamlFile<PnpmWorkspaceData>(configPath);\n }\n\n /**\n * Write pnpm-workspace.yaml configuration\n */\n async writePnpmWorkspaceConfig(\n workspacePath: WorkspacePath,\n config: PnpmWorkspaceData\n ): Promise<void> {\n const configPath = workspacePath.getPnpmWorkspaceConfigPath().toString();\n await this.writeYamlFilePreservingFormat(configPath, config);\n }\n\n /**\n * Read package.json file\n */\n async readPackageJson(packagePath: WorkspacePath): Promise<PackageJsonData> {\n const packageJsonPath = packagePath.getPackageJsonPath().toString();\n\n if (!(await this.exists(packageJsonPath))) {\n throw new Error(`package.json not found at ${packageJsonPath}`);\n }\n\n return await this.readJsonFile<PackageJsonData>(packageJsonPath);\n }\n\n /**\n * Write package.json file\n */\n async writePackageJson(packagePath: WorkspacePath, packageData: PackageJsonData): Promise<void> {\n const packageJsonPath = packagePath.getPackageJsonPath().toString();\n await this.writeJsonFile(packageJsonPath, packageData);\n }\n\n /**\n * Find package.json files using glob patterns\n */\n async findPackageJsonFiles(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]> {\n const results: string[] = [];\n\n for (const pattern of patterns) {\n try {\n // Convert pattern to absolute path and look for package.json\n const absolutePattern = path.resolve(workspacePath.toString(), pattern, 'package.json');\n const matches = await glob(absolutePattern, {\n ignore: ['**/node_modules/**'],\n absolute: true,\n });\n results.push(...matches);\n } catch (error) {\n // Continue with other patterns if one fails\n console.warn(`Failed to process pattern ${pattern}:`, error);\n }\n }\n\n // Remove duplicates and return\n return Array.from(new Set(results));\n }\n\n /**\n * Find directories matching patterns\n */\n async findDirectories(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]> {\n const results: string[] = [];\n\n for (const pattern of patterns) {\n try {\n const absolutePattern = path.resolve(workspacePath.toString(), pattern);\n const matches = await glob(absolutePattern, {\n ignore: ['**/node_modules/**'],\n absolute: true,\n });\n results.push(...matches);\n } catch (error) {\n console.warn(`Failed to process pattern ${pattern}:`, error);\n }\n }\n\n return Array.from(new Set(results));\n }\n\n /**\n * Check if a directory contains a pnpm workspace\n */\n async isPnpmWorkspace(dirPath: string): Promise<boolean> {\n const workspaceConfigPath = path.join(dirPath, 'pnpm-workspace.yaml');\n const packageJsonPath = path.join(dirPath, 'package.json');\n\n // Must have both pnpm-workspace.yaml and package.json\n return (await this.exists(workspaceConfigPath)) && (await this.exists(packageJsonPath));\n }\n\n /**\n * Find the nearest pnpm workspace by traversing up the directory tree\n */\n async findNearestWorkspace(startPath: string): Promise<string | null> {\n let currentPath = path.resolve(startPath);\n\n while (currentPath !== path.dirname(currentPath)) {\n if (await this.isPnpmWorkspace(currentPath)) {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n }\n\n return null;\n }\n\n /**\n * Get file modification time\n */\n async getModificationTime(filePath: string): Promise<Date> {\n try {\n const stat = await fs.stat(filePath);\n return stat.mtime;\n } catch (error) {\n throw new Error(`Failed to get modification time for ${filePath}: ${error}`);\n }\n }\n\n /**\n * Create a backup of a file\n */\n async createBackup(filePath: string): Promise<string> {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const backupPath = `${filePath}.backup.${timestamp}`;\n\n try {\n await fs.copyFile(filePath, backupPath);\n return backupPath;\n } catch (error) {\n throw new Error(`Failed to create backup of ${filePath}: ${error}`);\n }\n }\n\n /**\n * Restore a file from backup\n */\n async restoreFromBackup(originalPath: string, backupPath: string): Promise<void> {\n try {\n await fs.copyFile(backupPath, originalPath);\n } catch (error) {\n throw new Error(`Failed to restore ${originalPath} from backup: ${error}`);\n }\n }\n\n /**\n * Remove a file\n */\n async removeFile(filePath: string): Promise<void> {\n try {\n await fs.unlink(filePath);\n } catch (error) {\n throw new Error(`Failed to remove file ${filePath}: ${error}`);\n }\n }\n\n /**\n * List files in a directory\n */\n async listFiles(dirPath: string): Promise<string[]> {\n try {\n const items = await fs.readdir(dirPath, { withFileTypes: true });\n return items.filter((item) => item.isFile()).map((item) => path.join(dirPath, item.name));\n } catch (error) {\n throw new Error(`Failed to list files in ${dirPath}: ${error}`);\n }\n }\n\n /**\n * List directories in a directory\n */\n async listDirectories(dirPath: string): Promise<string[]> {\n try {\n const items = await fs.readdir(dirPath, { withFileTypes: true });\n return items\n .filter((item) => item.isDirectory())\n .map((item) => path.join(dirPath, item.name));\n } catch (error) {\n throw new Error(`Failed to list directories in ${dirPath}: ${error}`);\n }\n }\n}\n","/**\n * File-based Workspace Repository Implementation\n *\n * Implements WorkspaceRepository interface using the file system.\n * Handles loading and saving workspace data from pnpm-workspace.yaml and package.json files.\n */\n\nimport path from 'path';\n\nimport { Catalog } from '../../domain/entities/catalog.js';\nimport { Package } from '../../domain/entities/package.js';\nimport { Workspace } from '../../domain/entities/workspace.js';\nimport { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js';\nimport { CatalogCollection } from '../../domain/value-objects/catalogCollection.js';\nimport { PackageCollection } from '../../domain/value-objects/packageCollection.js';\nimport { WorkspaceConfig } from '../../domain/value-objects/workspaceConfig.js';\nimport { WorkspaceId } from '../../domain/value-objects/workspaceId.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\nimport { FileSystemService } from '../file-system/fileSystemService.js';\n\nexport class FileWorkspaceRepository implements WorkspaceRepository {\n constructor(private readonly fileSystemService: FileSystemService) {}\n\n /**\n * Find a workspace by its path\n */\n async findByPath(path: WorkspacePath): Promise<Workspace | null> {\n try {\n // Check if the path contains a valid workspace\n if (!(await this.isValidWorkspace(path))) {\n return null;\n }\n\n // Load workspace configuration\n const config = await this.loadConfiguration(path);\n\n // Create workspace ID from path\n const id = WorkspaceId.fromPath(path.toString());\n\n // Load packages\n const packages = await this.loadPackages(path, config);\n\n // Load catalogs\n const catalogs = await this.loadCatalogs(config);\n\n return Workspace.create(id, path, config, catalogs, packages);\n } catch (error) {\n console.error(`Failed to load workspace from ${path.toString()}:`, error);\n return null;\n }\n }\n\n /**\n * Find a workspace by its ID\n */\n async findById(_id: WorkspaceId): Promise<Workspace | null> {\n // For file-based implementation, we would need to maintain a mapping\n // of IDs to paths. For now, this is not implemented.\n throw new Error('Finding workspace by ID is not implemented in file-based repository');\n }\n\n /**\n * Save a workspace\n */\n async save(workspace: Workspace): Promise<void> {\n try {\n // Save workspace configuration\n await this.saveConfiguration(workspace.getPath(), workspace.getConfig());\n\n // Save packages (update their package.json files)\n await this.savePackages(workspace.getPackages());\n } catch (error) {\n throw new Error(`Failed to save workspace: ${error}`);\n }\n }\n\n /**\n * Load workspace configuration from path\n */\n async loadConfiguration(path: WorkspacePath): Promise<WorkspaceConfig> {\n try {\n const workspaceData = await this.fileSystemService.readPnpmWorkspaceConfig(path);\n return WorkspaceConfig.fromWorkspaceData(workspaceData);\n } catch (error) {\n throw new Error(`Failed to load workspace configuration from ${path.toString()}: ${error}`);\n }\n }\n\n /**\n * Save workspace configuration to path\n */\n async saveConfiguration(path: WorkspacePath, config: WorkspaceConfig): Promise<void> {\n try {\n const workspaceData = config.toPnpmWorkspaceData();\n await this.fileSystemService.writePnpmWorkspaceConfig(path, workspaceData);\n } catch (error) {\n throw new Error(`Failed to save workspace configuration to ${path.toString()}: ${error}`);\n }\n }\n\n /**\n * Check if a path contains a valid pnpm workspace\n */\n async isValidWorkspace(path: WorkspacePath): Promise<boolean> {\n return await this.fileSystemService.isPnpmWorkspace(path.toString());\n }\n\n /**\n * Discover workspace from current working directory or given path\n */\n async discoverWorkspace(searchPath?: WorkspacePath): Promise<Workspace | null> {\n const startPath = searchPath?.toString() || process.cwd();\n\n try {\n const workspacePath = await this.fileSystemService.findNearestWorkspace(startPath);\n\n if (!workspacePath) {\n return null;\n }\n\n return await this.findByPath(WorkspacePath.fromString(workspacePath));\n } catch (error) {\n console.error(`Failed to discover workspace from ${startPath}:`, error);\n return null;\n }\n }\n\n /**\n * Load packages from workspace\n */\n private async loadPackages(\n workspacePath: WorkspacePath,\n config: WorkspaceConfig\n ): Promise<PackageCollection> {\n try {\n const packagePatterns = config.getPackagePatterns();\n\n // Find all package.json files matching the patterns\n const packageJsonFiles = await this.fileSystemService.findPackageJsonFiles(\n workspacePath,\n packagePatterns\n );\n\n const packages: Package[] = [];\n\n for (const packageJsonPath of packageJsonFiles) {\n try {\n const packageDir = path.dirname(packageJsonPath);\n const packagePath = WorkspacePath.fromString(packageDir);\n\n // Read package.json\n const packageData = await this.fileSystemService.readPackageJson(packagePath);\n\n // Create package\n const packageId = `${packageData.name}-${packageDir}`;\n const pkg = Package.create(packageId, packageData.name, packagePath, packageData);\n\n packages.push(pkg);\n } catch (error) {\n console.warn(`Failed to load package from ${packageJsonPath}:`, error);\n // Continue with other packages\n }\n }\n\n return PackageCollection.fromPackages(packages);\n } catch (error) {\n throw new Error(`Failed to load packages: ${error}`);\n }\n }\n\n /**\n * Load catalogs from workspace configuration\n */\n private async loadCatalogs(config: WorkspaceConfig): Promise<CatalogCollection> {\n try {\n const catalogs: Catalog[] = [];\n const catalogDefinitions = config.getCatalogDefinitions();\n\n for (const [catalogName, catalogDef] of catalogDefinitions) {\n const catalogId = `catalog-${catalogName}`;\n const catalog = Catalog.create(\n catalogId,\n catalogName,\n catalogDef.getDependencies(),\n config.getCatalogMode()\n );\n catalogs.push(catalog);\n }\n\n return CatalogCollection.fromCatalogs(catalogs);\n } catch (error) {\n throw new Error(`Failed to load catalogs: ${error}`);\n }\n }\n\n /**\n * Save packages (update their package.json files)\n */\n private async savePackages(packages: PackageCollection): Promise<void> {\n for (const pkg of packages.getAll()) {\n try {\n const packageData = pkg.toPackageJsonData();\n await this.fileSystemService.writePackageJson(pkg.getPath(), packageData);\n } catch (error) {\n console.error(`Failed to save package ${pkg.getName()}:`, error);\n // Continue with other packages\n }\n }\n }\n}\n","/**\n * Color Theme System\n *\n * Provides consistent color schemes and styling across the CLI\n */\n\nimport chalk from 'chalk';\n\nexport interface ColorTheme {\n // Brand colors\n primary: (text: string) => string;\n secondary: (text: string) => string;\n accent: (text: string) => string;\n\n // Semantic colors\n success: (text: string) => string;\n warning: (text: string) => string;\n error: (text: string) => string;\n info: (text: string) => string;\n\n // UI colors\n text: (text: string) => string;\n muted: (text: string) => string;\n border: (text: string) => string;\n background: (text: string) => string;\n\n // Status colors\n pending: (text: string) => string;\n processing: (text: string) => string;\n completed: (text: string) => string;\n\n // Version colors\n major: (text: string) => string;\n minor: (text: string) => string;\n patch: (text: string) => string;\n prerelease: (text: string) => string;\n\n // Risk levels\n riskHigh: (text: string) => string;\n riskMedium: (text: string) => string;\n riskLow: (text: string) => string;\n}\n\nexport class ThemeManager {\n private static currentTheme: ColorTheme;\n\n static themes = {\n default: {\n primary: (text: string) => chalk.hex('#0ea5e9')(text),\n secondary: (text: string) => chalk.hex('#8b5cf6')(text),\n accent: (text: string) => chalk.hex('#f59e0b')(text),\n\n success: (text: string) => chalk.green(text),\n warning: (text: string) => chalk.yellow(text),\n error: (text: string) => chalk.red(text),\n info: (text: string) => chalk.blue(text),\n\n text: (text: string) => chalk.white(text),\n muted: (text: string) => chalk.gray(text),\n border: (text: string) => chalk.dim(text),\n background: (text: string) => chalk.bgBlack(text),\n\n pending: (text: string) => chalk.cyan(text),\n processing: (text: string) => chalk.blue(text),\n completed: (text: string) => chalk.green(text),\n\n major: (text: string) => chalk.red(text),\n minor: (text: string) => chalk.yellow(text),\n patch: (text: string) => chalk.green(text),\n prerelease: (text: string) => chalk.magenta(text),\n\n riskHigh: (text: string) => chalk.red(text),\n riskMedium: (text: string) => chalk.yellow(text),\n riskLow: (text: string) => chalk.green(text),\n },\n\n modern: {\n primary: (text: string) => chalk.hex('#06b6d4')(text),\n secondary: (text: string) => chalk.hex('#ec4899')(text),\n accent: (text: string) => chalk.hex('#10b981')(text),\n\n success: (text: string) => chalk.hex('#10b981')(text),\n warning: (text: string) => chalk.hex('#f59e0b')(text),\n error: (text: string) => chalk.hex('#ef4444')(text),\n info: (text: string) => chalk.hex('#06b6d4')(text),\n\n text: (text: string) => chalk.hex('#e5e7eb')(text),\n muted: (text: string) => chalk.hex('#6b7280')(text),\n border: (text: string) => chalk.hex('#374151')(text),\n background: (text: string) => chalk.hex('#111827')(text),\n\n pending: (text: string) => chalk.hex('#06b6d4')(text),\n processing: (text: string) => chalk.hex('#3b82f6')(text),\n completed: (text: string) => chalk.hex('#10b981')(text),\n\n major: (text: string) => chalk.hex('#ef4444')(text),\n minor: (text: string) => chalk.hex('#f59e0b')(text),\n patch: (text: string) => chalk.hex('#10b981')(text),\n prerelease: (text: string) => chalk.hex('#8b5cf6')(text),\n\n riskHigh: (text: string) => chalk.hex('#ef4444')(text),\n riskMedium: (text: string) => chalk.hex('#f59e0b')(text),\n riskLow: (text: string) => chalk.hex('#10b981')(text),\n },\n\n minimal: {\n primary: (text: string) => chalk.white(text),\n secondary: (text: string) => chalk.gray(text),\n accent: (text: string) => chalk.white(text),\n\n success: (text: string) => chalk.green(text),\n warning: (text: string) => chalk.yellow(text),\n error: (text: string) => chalk.red(text),\n info: (text: string) => chalk.blue(text),\n\n text: (text: string) => chalk.white(text),\n muted: (text: string) => chalk.gray(text),\n border: (text: string) => chalk.gray(text),\n background: (text: string) => chalk.white(text),\n\n pending: (text: string) => chalk.blue(text),\n processing: (text: string) => chalk.blue(text),\n completed: (text: string) => chalk.green(text),\n\n major: (text: string) => chalk.red(text),\n minor: (text: string) => chalk.yellow(text),\n patch: (text: string) => chalk.green(text),\n prerelease: (text: string) => chalk.magenta(text),\n\n riskHigh: (text: string) => chalk.red(text),\n riskMedium: (text: string) => chalk.yellow(text),\n riskLow: (text: string) => chalk.green(text),\n },\n\n neon: {\n primary: (text: string) => chalk.hex('#00ffff')(text),\n secondary: (text: string) => chalk.hex('#ff00ff')(text),\n accent: (text: string) => chalk.hex('#ffff00')(text),\n\n success: (text: string) => chalk.hex('#00ff00')(text),\n warning: (text: string) => chalk.hex('#ffff00')(text),\n error: (text: string) => chalk.hex('#ff0000')(text),\n info: (text: string) => chalk.hex('#00ffff')(text),\n\n text: (text: string) => chalk.hex('#ffffff')(text),\n muted: (text: string) => chalk.hex('#808080')(text),\n border: (text: string) => chalk.hex('#404040')(text),\n background: (text: string) => chalk.hex('#000000')(text),\n\n pending: (text: string) => chalk.hex('#00ffff')(text),\n processing: (text: string) => chalk.hex('#0080ff')(text),\n completed: (text: string) => chalk.hex('#00ff00')(text),\n\n major: (text: string) => chalk.hex('#ff0000')(text),\n minor: (text: string) => chalk.hex('#ffff00')(text),\n patch: (text: string) => chalk.hex('#00ff00')(text),\n prerelease: (text: string) => chalk.hex('#ff00ff')(text),\n\n riskHigh: (text: string) => chalk.hex('#ff0000')(text),\n riskMedium: (text: string) => chalk.hex('#ffff00')(text),\n riskLow: (text: string) => chalk.hex('#00ff00')(text),\n },\n };\n\n static setTheme(themeName: keyof typeof ThemeManager.themes): void {\n this.currentTheme = this.themes[themeName];\n }\n\n static getTheme(): ColorTheme {\n return this.currentTheme || this.themes.default;\n }\n\n static listThemes(): string[] {\n return Object.keys(this.themes);\n }\n}\n\n/**\n * Styled text utilities\n */\nexport class StyledText {\n private static theme = ThemeManager.getTheme();\n\n static updateTheme(): void {\n this.theme = ThemeManager.getTheme();\n }\n\n // Brand styles\n static brand(text: string): string {\n return this.theme.primary(text);\n }\n\n static secondary(text: string): string {\n return this.theme.secondary(text);\n }\n\n static accent(text: string): string {\n return this.theme.accent(text);\n }\n\n // Semantic styles\n static success(text: string): string {\n return this.theme.success(text);\n }\n\n static warning(text: string): string {\n return this.theme.warning(text);\n }\n\n static error(text: string): string {\n return this.theme.error(text);\n }\n\n static info(text: string): string {\n return this.theme.info(text);\n }\n\n // UI styles\n static text(text: string): string {\n return this.theme.text(text);\n }\n\n static muted(text: string): string {\n return this.theme.muted(text);\n }\n\n static border(text: string): string {\n return this.theme.border(text);\n }\n\n // Status styles\n static pending(text: string): string {\n return this.theme.pending(text);\n }\n\n static processing(text: string): string {\n return this.theme.processing(text);\n }\n\n static completed(text: string): string {\n return this.theme.completed(text);\n }\n\n // Version styles\n static versionMajor(text: string): string {\n return this.theme.major(text);\n }\n\n static versionMinor(text: string): string {\n return this.theme.minor(text);\n }\n\n static versionPatch(text: string): string {\n return this.theme.patch(text);\n }\n\n static versionPrerelease(text: string): string {\n return this.theme.prerelease(text);\n }\n\n // Risk styles\n static riskHigh(text: string): string {\n return this.theme.riskHigh(text);\n }\n\n static riskMedium(text: string): string {\n return this.theme.riskMedium(text);\n }\n\n static riskLow(text: string): string {\n return this.theme.riskLow(text);\n }\n\n // Icons\n static icon(icon: string, text?: string): string {\n return text ? `${icon} ${text}` : icon;\n }\n\n static iconSuccess(text?: string): string {\n return this.icon('✅', text);\n }\n\n static iconWarning(text?: string): string {\n return this.icon('⚠️', text);\n }\n\n static iconError(text?: string): string {\n return this.icon('❌', text);\n }\n\n static iconInfo(text?: string): string {\n return this.icon('ℹ️', text);\n }\n\n static iconPackage(text?: string): string {\n return this.icon('📦', text);\n }\n\n static iconCatalog(text?: string): string {\n return this.icon('📋', text);\n }\n\n static iconUpdate(text?: string): string {\n return this.icon('🔄', text);\n }\n\n static iconSecurity(text?: string): string {\n return this.icon('🔒', text);\n }\n\n static iconAnalysis(text?: string): string {\n return this.icon('🔍', text);\n }\n\n static iconCheck(text?: string): string {\n return this.icon('✅', text);\n }\n\n static iconProgress(text?: string): string {\n return this.icon('⏳', text);\n }\n\n static iconComplete(text?: string): string {\n return this.icon('🎉', text);\n }\n}\n\n/**\n * Table styling utilities\n */\nexport class TableStyles {\n static createHeaderStyle(color: any) {\n return (text: string) => color.bold(text);\n }\n\n static createBorderStyle(color: any) {\n return (text: string) => color.dim(text);\n }\n\n static createCellStyle(color: any) {\n return (text: string) => color(text);\n }\n}\n\n/**\n * Theme configuration interface\n */\nexport interface ThemeConfig {\n name: string;\n colors: Partial<ColorTheme>;\n icons: Record<string, string>;\n styles: Record<string, any>;\n}\n\n/**\n * Theme presets for different use cases\n */\nexport const themePresets = {\n development: {\n name: 'development',\n description: 'Bright colors for development environments',\n theme: 'modern',\n },\n production: {\n name: 'production',\n description: 'Subtle colors for production environments',\n theme: 'minimal',\n },\n presentation: {\n name: 'presentation',\n description: 'High contrast colors for presentations',\n theme: 'neon',\n },\n default: {\n name: 'default',\n description: 'Balanced colors for general use',\n theme: 'default',\n },\n};\n","/**\n * Check Command\n *\n * CLI command to check for outdated catalog dependencies.\n * Provides detailed information about available updates.\n */\n\nimport { CatalogUpdateService, CheckOptions } from '@pcu/core';\nimport { ConfigLoader } from '@pcu/utils';\nimport { OutputFormat, OutputFormatter } from '../formatters/outputFormatter.js';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\n\nexport interface CheckCommandOptions {\n workspace?: string;\n catalog?: string;\n format?: OutputFormat;\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n prerelease?: boolean;\n include?: string[];\n exclude?: string[];\n verbose?: boolean;\n color?: boolean;\n}\n\nexport class CheckCommand {\n constructor(private readonly catalogUpdateService: CatalogUpdateService) {}\n\n /**\n * Execute the check command\n */\n async execute(options: CheckCommandOptions = {}): Promise<void> {\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n if (options.verbose) {\n console.log(StyledText.iconAnalysis('Checking for outdated catalog dependencies'));\n console.log(StyledText.muted(`Workspace: ${options.workspace || process.cwd()}`));\n\n if (options.catalog) {\n console.log(StyledText.muted(`Catalog: ${options.catalog}`));\n }\n\n if (options.target && options.target !== 'latest') {\n console.log(StyledText.muted(`Target: ${options.target}`));\n }\n\n console.log('');\n }\n\n // Load configuration file first\n const config = ConfigLoader.loadConfig(options.workspace || process.cwd());\n\n // Use format from CLI options first, then config file, then default\n const effectiveFormat = options.format || config.defaults?.format || 'table';\n\n // Create output formatter with effective format\n const formatter = new OutputFormatter(\n effectiveFormat as OutputFormat,\n options.color !== false\n );\n\n // Merge CLI options with configuration file settings\n const checkOptions: CheckOptions = {\n workspacePath: options.workspace,\n catalogName: options.catalog,\n target: options.target || config.defaults?.target || 'latest',\n includePrerelease: options.prerelease ?? config.defaults?.includePrerelease ?? false,\n // CLI include/exclude options take priority over config file\n include: options.include?.length ? options.include : config.include,\n exclude: options.exclude?.length ? options.exclude : config.exclude,\n };\n\n // Execute check\n const report = await this.catalogUpdateService.checkOutdatedDependencies(checkOptions);\n\n // Format and display results\n const formattedOutput = formatter.formatOutdatedReport(report);\n console.log(formattedOutput);\n\n // Show summary\n if (options.verbose || options.format === 'table') {\n this.showSummary(report, options);\n }\n\n // Always exit with 0 since this is just a check command\n // and finding updates is not an error condition\n process.exit(0);\n } catch (error) {\n console.error(StyledText.iconError('Error checking dependencies:'));\n console.error(StyledText.error(String(error)));\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'));\n console.error(StyledText.muted(error.stack || 'No stack trace available'));\n }\n\n process.exit(1);\n }\n }\n\n /**\n * Show command summary\n */\n private showSummary(report: any, _options: CheckCommandOptions): void {\n const lines: string[] = [];\n const theme = ThemeManager.getTheme();\n\n if (!report.hasUpdates) {\n lines.push(StyledText.iconSuccess('All catalog dependencies are up to date!'));\n } else {\n lines.push(StyledText.iconInfo('Summary:'));\n lines.push(` • ${report.totalOutdated} outdated dependencies found`);\n lines.push(` • ${report.catalogs.length} catalogs checked`);\n\n const totalPackages = report.catalogs.reduce(\n (sum: number, cat: any) => sum + cat.totalPackages,\n 0\n );\n lines.push(` • ${totalPackages} total catalog entries`);\n\n // Show breakdown by update type\n const updateTypes = { major: 0, minor: 0, patch: 0 };\n\n for (const catalog of report.catalogs) {\n for (const dep of catalog.outdatedDependencies) {\n updateTypes[dep.updateType as keyof typeof updateTypes]++;\n }\n }\n\n if (updateTypes.major > 0) {\n lines.push(theme.major(` • ${updateTypes.major} major updates`));\n }\n if (updateTypes.minor > 0) {\n lines.push(theme.minor(` • ${updateTypes.minor} minor updates`));\n }\n if (updateTypes.patch > 0) {\n lines.push(theme.patch(` • ${updateTypes.patch} patch updates`));\n }\n\n // Security updates\n const securityUpdates = report.catalogs.reduce((sum: number, cat: any) => {\n return sum + cat.outdatedDependencies.filter((dep: any) => dep.isSecurityUpdate).length;\n }, 0);\n\n if (securityUpdates > 0) {\n lines.push(StyledText.iconSecurity(`${securityUpdates} security updates`));\n }\n\n lines.push('');\n lines.push(StyledText.iconUpdate('Run with --update to apply updates'));\n\n if (updateTypes.major > 0) {\n lines.push(StyledText.iconWarning('Major updates may contain breaking changes'));\n }\n }\n\n console.log(lines.join('\\n'));\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: CheckCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal');\n }\n\n // Validate target\n if (\n options.target &&\n !['latest', 'greatest', 'minor', 'patch', 'newest'].includes(options.target)\n ) {\n errors.push('Invalid target. Must be one of: latest, greatest, minor, patch, newest');\n }\n\n // Validate include/exclude patterns\n if (options.include && options.include.some((pattern) => !pattern.trim())) {\n errors.push('Include patterns cannot be empty');\n }\n\n if (options.exclude && options.exclude.some((pattern) => !pattern.trim())) {\n errors.push('Exclude patterns cannot be empty');\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nCheck for outdated catalog dependencies\n\nUsage:\n pcu check [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --catalog <name> Check specific catalog only\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --target <type> Update target: latest, greatest, minor, patch, newest (default: latest)\n --prerelease Include prerelease versions\n --include <pattern> Include packages matching pattern (can be used multiple times)\n --exclude <pattern> Exclude packages matching pattern (can be used multiple times)\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu check # Check all catalogs\n pcu check --catalog react17 # Check specific catalog\n pcu check --target minor # Check for minor updates only\n pcu check --format json # Output as JSON\n pcu check --include \"react*\" # Include only React packages\n pcu check --exclude \"@types/*\" # Exclude TypeScript types\n\nExit Codes:\n 0 All dependencies are up to date\n 1 Updates are available\n 2 Error occurred\n `;\n }\n}\n","/**\n * Init Command\n *\n * CLI command to initialize PCU configuration in a workspace.\n * Creates a basic .pcurc.json configuration file with sensible defaults.\n */\n\nimport { PackageFilterConfig } from '@pcu/utils';\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\n\nexport interface InitCommandOptions {\n workspace?: string;\n force?: boolean;\n verbose?: boolean;\n color?: boolean;\n createWorkspace?: boolean;\n full?: boolean;\n}\n\nexport class InitCommand {\n /**\n * Execute the init command\n */\n async execute(options: InitCommandOptions = {}): Promise<void> {\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n const workspacePath = options.workspace || process.cwd();\n const configPath = join(workspacePath, '.pcurc.json');\n const packageJsonPath = join(workspacePath, 'package.json');\n const workspaceYamlPath = join(workspacePath, 'pnpm-workspace.yaml');\n\n if (options.verbose) {\n console.log(StyledText.iconInfo('Initializing PCU configuration'));\n console.log(StyledText.muted(`Workspace: ${workspacePath}`));\n console.log(StyledText.muted(`Config file: ${configPath}`));\n console.log('');\n }\n\n // Check if this is a pnpm workspace\n const hasPackageJson = existsSync(packageJsonPath);\n const hasWorkspaceYaml = existsSync(workspaceYamlPath);\n const isWorkspace = hasPackageJson && hasWorkspaceYaml;\n\n if (!isWorkspace && options.createWorkspace !== false) {\n if (options.verbose) {\n console.log(StyledText.iconWarning('PNPM workspace structure not detected'));\n if (!hasPackageJson) {\n console.log(StyledText.muted('Missing: package.json'));\n }\n if (!hasWorkspaceYaml) {\n console.log(StyledText.muted('Missing: pnpm-workspace.yaml'));\n }\n console.log('');\n }\n\n // Create workspace structure\n if (options.verbose) {\n console.log(StyledText.iconInfo('Creating PNPM workspace structure...'));\n }\n\n await this.createWorkspaceStructure(\n workspacePath,\n hasPackageJson,\n hasWorkspaceYaml,\n options\n );\n\n if (options.verbose) {\n console.log(StyledText.iconSuccess('PNPM workspace structure created'));\n console.log('');\n }\n }\n\n // Check if config file already exists\n if (existsSync(configPath) && !options.force) {\n console.log(StyledText.iconWarning('Configuration file already exists!'));\n console.log(StyledText.muted(`Found: ${configPath}`));\n console.log(StyledText.muted('Use --force to overwrite existing configuration'));\n process.exit(1);\n }\n\n // Create directory if it doesn't exist\n const configDir = dirname(configPath);\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true });\n }\n\n // Generate basic configuration\n const basicConfig = this.generateBasicConfig(options.full);\n\n // Write configuration file\n writeFileSync(configPath, JSON.stringify(basicConfig, null, 2), 'utf-8');\n\n // Success message\n console.log(StyledText.iconSuccess('PCU configuration initialized successfully!'));\n console.log(StyledText.muted(`Created: ${configPath}`));\n console.log('');\n\n // Show next steps\n this.showNextSteps(configPath);\n\n process.exit(0);\n } catch (error) {\n console.error(StyledText.iconError('Error initializing configuration:'));\n console.error(StyledText.error(String(error)));\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'));\n console.error(StyledText.muted(error.stack || 'No stack trace available'));\n }\n\n process.exit(1);\n }\n }\n\n /**\n * Create PNPM workspace structure\n */\n private async createWorkspaceStructure(\n workspacePath: string,\n hasPackageJson: boolean,\n hasWorkspaceYaml: boolean,\n options: InitCommandOptions\n ): Promise<void> {\n // Create package.json if it doesn't exist\n if (!hasPackageJson) {\n const packageJsonPath = join(workspacePath, 'package.json');\n const packageJson = this.generateWorkspacePackageJson();\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8');\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: package.json'));\n }\n }\n\n // Create pnpm-workspace.yaml if it doesn't exist\n if (!hasWorkspaceYaml) {\n const workspaceYamlPath = join(workspacePath, 'pnpm-workspace.yaml');\n const workspaceYaml = this.generateWorkspaceYaml();\n writeFileSync(workspaceYamlPath, workspaceYaml, 'utf-8');\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: pnpm-workspace.yaml'));\n }\n }\n\n // Create basic directories structure\n const packagesDir = join(workspacePath, 'packages');\n if (!existsSync(packagesDir)) {\n mkdirSync(packagesDir, { recursive: true });\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: packages/ directory'));\n }\n }\n }\n\n /**\n * Generate workspace package.json\n */\n private generateWorkspacePackageJson(): any {\n return {\n name: 'my-workspace',\n version: '1.0.0',\n private: true,\n description: 'PNPM workspace with catalog dependency management',\n scripts: {\n 'check-updates': 'pcu check',\n 'update-deps': 'pcu update --interactive',\n 'security-audit': 'pcu security',\n },\n devDependencies: {\n 'pnpm-catalog-updates': 'latest',\n },\n };\n }\n\n /**\n * Generate pnpm-workspace.yaml\n */\n private generateWorkspaceYaml(): string {\n return `# PNPM Workspace Configuration\n# Learn more: https://pnpm.io/pnpm-workspace_yaml\n\npackages:\n # Include all packages in packages directory\n - 'packages/*'\n \n # Include apps directory if you have applications\n # - 'apps/*'\n \n # Include tools directory if you have development tools\n # - 'tools/*'\n\n# Catalog Configuration\n# Centrally manage dependency versions across workspace packages\n# Learn more: https://pnpm.io/catalogs\ncatalogs:\n # Default catalog for common dependencies\n default:\n # React ecosystem\n # react: ^18.2.0\n # react-dom: ^18.2.0\n # '@types/react': ^18.2.0\n # '@types/react-dom': ^18.2.0\n \n # TypeScript and Node.js\n # typescript: ^5.0.0\n # '@types/node': ^20.0.0\n \n # Development tools\n # eslint: ^8.0.0\n # prettier: ^3.0.0\n # vitest: ^1.0.0\n`;\n }\n\n /**\n * Generate basic configuration with sensible defaults\n */\n private generateBasicConfig(full?: boolean): PackageFilterConfig {\n if (full) {\n return this.generateFullConfig();\n }\n\n // Minimal configuration\n return {\n defaults: {\n target: 'latest',\n createBackup: true,\n format: 'table',\n },\n exclude: [],\n include: [],\n };\n }\n\n /**\n * Generate full configuration with all options\n */\n private generateFullConfig(): PackageFilterConfig {\n return {\n defaults: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n dryRun: false,\n createBackup: true,\n format: 'table',\n },\n packageRules: [\n {\n patterns: ['react', 'react-dom'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: true,\n relatedPackages: ['@types/react', '@types/react-dom'],\n },\n {\n patterns: ['@types/*'],\n target: 'latest',\n autoUpdate: true,\n requireConfirmation: false,\n groupUpdate: false,\n },\n {\n patterns: ['eslint*', 'prettier', '@typescript-eslint/*'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: false,\n groupUpdate: true,\n },\n ],\n security: {\n autoFixVulnerabilities: true,\n allowMajorForSecurity: true,\n notifyOnSecurityUpdate: false,\n },\n advanced: {\n concurrency: 5,\n timeout: 30000,\n retries: 3,\n cacheValidityMinutes: 60,\n checkForUpdates: true,\n },\n monorepo: {\n syncVersions: [],\n catalogPriority: ['default'],\n },\n exclude: [],\n include: [],\n };\n }\n\n /**\n * Show next steps to the user\n */\n private showNextSteps(configPath: string): void {\n const lines: string[] = [];\n\n lines.push(StyledText.iconInfo('Next steps:'));\n lines.push('');\n lines.push(StyledText.muted('1. Review and customize the configuration:'));\n lines.push(StyledText.muted(` ${configPath}`));\n lines.push('');\n lines.push(StyledText.muted('2. Add packages to your workspace:'));\n lines.push(StyledText.muted(' mkdir packages/my-app && cd packages/my-app'));\n lines.push(StyledText.muted(' pnpm init'));\n lines.push('');\n lines.push(StyledText.muted('3. Install dependencies and check for updates:'));\n lines.push(StyledText.muted(' pnpm install'));\n lines.push(StyledText.muted(' pcu check'));\n lines.push('');\n lines.push(StyledText.muted('4. Update dependencies interactively:'));\n lines.push(StyledText.muted(' pcu update --interactive'));\n lines.push('');\n lines.push(StyledText.muted('5. Learn more about PNPM workspace and PCU:'));\n lines.push(StyledText.muted(' https://pnpm.io/workspaces'));\n lines.push(\n StyledText.muted(' https://github.com/your-repo/pnpm-catalog-updates#configuration')\n );\n\n console.log(lines.join('\\n'));\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: InitCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate workspace path exists if provided\n if (options.workspace && !existsSync(options.workspace)) {\n errors.push(`Workspace directory does not exist: ${options.workspace}`);\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nInitialize PCU configuration and PNPM workspace\n\nUsage:\n pcu init [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --force Overwrite existing configuration file\n --full Generate full configuration with all options\n --create-workspace Create PNPM workspace structure if missing (default: true)\n --no-create-workspace Skip creating PNPM workspace structure\n --verbose Show detailed information\n --no-color Disable colored output\n\nDescription:\n Creates a complete PNPM workspace environment with:\n - Basic .pcurc.json configuration file with sensible defaults\n - package.json for workspace root (if missing)\n - pnpm-workspace.yaml configuration (if missing)\n - packages/ directory structure (if missing)\n \n By default, creates a minimal configuration. Use --full to generate\n a complete configuration with package rules for React, TypeScript,\n ESLint, and other common dependencies with security settings.\n\nExamples:\n pcu init # Initialize with minimal configuration\n pcu init --full # Initialize with full configuration\n pcu init --workspace ./my-project # Initialize in specific directory\n pcu init --force # Overwrite existing configuration\n pcu init --no-create-workspace # Only create .pcurc.json configuration\n\nFiles Created:\n .pcurc.json PCU configuration (minimal by default, full with --full)\n package.json Workspace root package.json (if missing)\n pnpm-workspace.yaml PNPM workspace configuration (if missing)\n packages/ Directory for workspace packages (if missing)\n\nExit Codes:\n 0 Configuration initialized successfully\n 1 Configuration already exists (use --force to overwrite)\n 2 Error occurred\n `;\n }\n}\n","/**\n * Enhanced Progress Bar\n *\n * Provides beautiful progress indicators for CLI operations\n * with multiple styles and themes.\n */\n\nimport chalk from 'chalk';\n\nexport interface ProgressBarOptions {\n text?: string;\n total?: number;\n style?: 'default' | 'gradient' | 'fancy' | 'minimal' | 'rainbow' | 'neon';\n showSpeed?: boolean;\n}\n\nexport class ProgressBar {\n private percentageBar: PercentageProgressBar | null = null;\n private current = 0;\n private total = 0;\n private text = '';\n private startTime: number = 0;\n private style: string;\n private showSpeed: boolean;\n\n constructor(options: ProgressBarOptions = {}) {\n this.text = options.text || 'Processing...';\n this.total = options.total || 0;\n this.style = options.style || 'default';\n this.showSpeed = options.showSpeed ?? true;\n }\n\n /**\n * Start the progress bar\n */\n start(text?: string): void {\n this.text = text || this.text;\n this.startTime = Date.now();\n\n // 在开始新进度条前,彻底清理可能的残留内容\n this.clearPreviousOutput();\n\n // 强制使用percentageBar,即使没有total也要创建\n // 这样可以避免spinner导致的冲突问题\n const effectiveTotal = this.total > 0 ? this.total : 1; // 如果没有total,设为1避免除零错误\n\n this.percentageBar = new PercentageProgressBar(40, {\n style: this.style,\n showStats: this.showSpeed,\n multiLine: true, // 使用多行模式减少闪烁\n });\n this.percentageBar.start(effectiveTotal, this.text);\n }\n\n /**\n * Update progress with text\n */\n update(text: string, current?: number, total?: number): void {\n this.text = text;\n if (current !== undefined) this.current = current;\n if (total !== undefined) this.total = total;\n\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar.update(this.current, text);\n }\n }\n\n /**\n * Increment progress\n */\n increment(amount = 1, text?: string): void {\n this.current += amount;\n if (text) this.text = text;\n\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar.update(this.current, text);\n }\n }\n\n /**\n * Mark as succeeded\n */\n succeed(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const successText = text || this.getCompletionText();\n this.percentageBar.complete(successText);\n console.log(this.getSuccessMessage(successText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Mark as failed\n */\n fail(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const failText = text || this.getFailureText();\n console.log(this.getFailureMessage(failText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Get styled success message\n */\n private getSuccessMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.magenta.bold('✨')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.cyan('🎉')} ${chalk.green.bold(text)} ${chalk.cyan('🎉')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.green(text);\n case 'rainbow':\n return `${chalk.magenta('🌈')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.green.bold('⚡ SUCCESS')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.green('✅')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Get styled failure message\n */\n private getFailureMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.red.bold('💥')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.red('💔')} ${chalk.red.bold(text)} ${chalk.red('💔')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.red(text);\n case 'rainbow':\n return `${chalk.red('⚠️')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.red.bold('⚡ ERROR')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.red('❌')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Get completion text with stats\n */\n private getCompletionText(): string {\n const elapsed = this.getElapsedTime();\n const speed = this.getAverageSpeed();\n return `${this.text} completed ${speed} ${elapsed}`;\n }\n\n /**\n * Get failure text\n */\n private getFailureText(): string {\n return `${this.text} failed`;\n }\n\n /**\n * Get elapsed time formatted\n */\n private getElapsedTime(): string {\n const elapsed = Date.now() - this.startTime;\n if (elapsed < 1000) return `(${elapsed}ms)`;\n if (elapsed < 60000) return `(${(elapsed / 1000).toFixed(1)}s)`;\n return `(${Math.floor(elapsed / 60000)}m ${Math.floor((elapsed % 60000) / 1000)}s)`;\n }\n\n /**\n * Get average processing speed\n */\n private getAverageSpeed(): string {\n const elapsed = Date.now() - this.startTime;\n if (elapsed === 0 || this.current === 0) return '';\n const speed = Math.round((this.current / elapsed) * 1000);\n return speed > 0 ? `(${speed}/s)` : '';\n }\n\n /**\n * Mark as warning\n */\n warn(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const warnText = text || this.text;\n console.log(this.getWarningMessage(warnText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Mark as info\n */\n info(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const infoText = text || this.text;\n console.log(this.getInfoMessage(infoText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Get styled warning message\n */\n private getWarningMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.yellow.bold('⚡')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.yellow('⚠️')} ${chalk.yellow.bold(text)} ${chalk.yellow('⚠️')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.yellow(text);\n case 'rainbow':\n return `${chalk.yellow('⚠️')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.yellow.bold('⚡ WARNING')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.yellow('⚠️')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Get styled info message\n */\n private getInfoMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.blue.bold('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.blue('💡')} ${chalk.blue.bold(text)} ${chalk.blue('💡')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.blue(text);\n case 'rainbow':\n return `${chalk.blue('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.blue.bold('⚡ INFO')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.blue('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Stop the progress bar\n */\n stop(): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar = null;\n }\n }\n\n /**\n * Clear previous output to prevent residual progress bars\n */\n private clearPreviousOutput(): void {\n // 清理可能的残留进度条显示(最多清理5行,应该足够了)\n for (let i = 0; i < 5; i++) {\n process.stdout.write('\\x1b[1A\\r\\x1b[K'); // 上移一行并清除\n }\n // 确保光标在正确位置\n process.stdout.write('\\r');\n }\n\n /**\n * Create a multi-step progress indicator\n */\n static createMultiStep(steps: string[]): MultiStepProgress {\n return new MultiStepProgress(steps);\n }\n\n /**\n * Create a beautiful gradient progress bar\n */\n static createGradient(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'gradient',\n showSpeed: true,\n ...options,\n });\n }\n\n /**\n * Create a fancy progress bar with decorations\n */\n static createFancy(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'fancy',\n showSpeed: true,\n ...options,\n });\n }\n\n /**\n * Create a minimal clean progress bar\n */\n static createMinimal(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'minimal',\n showSpeed: false,\n ...options,\n });\n }\n\n /**\n * Create a rainbow themed progress bar\n */\n static createRainbow(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'rainbow',\n showSpeed: true,\n ...options,\n });\n }\n\n /**\n * Create a neon style progress bar\n */\n static createNeon(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'neon',\n showSpeed: true,\n ...options,\n });\n }\n}\n\n/**\n * Multi-step progress indicator\n */\nexport class MultiStepProgress {\n private currentStep = 0;\n private steps: string[] = [];\n\n constructor(steps: string[]) {\n this.steps = steps;\n }\n\n start(): void {\n console.log(chalk.bold('\\n📋 Progress Steps:\\n'));\n this.renderSteps();\n }\n\n next(text?: string): void {\n if (this.currentStep < this.steps.length) {\n const stepText = text || this.steps[this.currentStep];\n console.log(` ${chalk.green('✓')} ${stepText}`);\n this.currentStep++;\n\n if (this.currentStep < this.steps.length) {\n console.log(` ${chalk.cyan('→')} ${this.steps[this.currentStep]}`);\n }\n }\n }\n\n complete(): void {\n console.log(chalk.green('\\n🎉 All steps completed!\\n'));\n }\n\n private renderSteps(): void {\n this.steps.forEach((step, index) => {\n const prefix = index === 0 ? chalk.cyan('→') : ' ';\n const style = index < this.currentStep ? chalk.green : chalk.gray;\n console.log(` ${prefix} ${style(step)}`);\n });\n console.log('');\n }\n}\n\n/**\n * Progress bar with percentage and beautiful visual effects\n */\nexport class PercentageProgressBar {\n private current = 0;\n private total = 0;\n private text = '';\n private lastRender = '';\n private startTime = 0;\n private style: string;\n private useMultiLine = true;\n private isFirstRender = true;\n\n constructor(\n private readonly width = 40,\n private readonly options: { style?: string; showStats?: boolean; multiLine?: boolean } = {}\n ) {\n this.style = options.style || 'gradient';\n this.useMultiLine = options.multiLine ?? true; // 默认使用多行模式来减少闪烁\n }\n\n start(total: number, text: string): void {\n this.total = total;\n this.current = 0;\n this.text = text;\n this.startTime = Date.now();\n this.isFirstRender = true; // 重置首次渲染标记\n\n // 清理可能的残留输出\n this.clearPreviousLines();\n\n this.render();\n }\n\n /**\n * Clear any previous output lines to prevent conflicts\n */\n private clearPreviousLines(): void {\n // 更强力的清理:清理多行可能的残留内容\n for (let i = 0; i < 6; i++) {\n process.stdout.write('\\x1b[1A\\r\\x1b[2K'); // 上移一行并完全清除该行\n }\n // 回到起始位置\n process.stdout.write('\\r');\n }\n\n update(current: number, text?: string): void {\n this.current = current;\n if (text) this.text = text;\n this.render();\n }\n\n increment(amount = 1, text?: string): void {\n this.current += amount;\n if (text) this.text = text;\n this.render();\n }\n\n complete(text?: string): void {\n this.current = this.total;\n if (text) this.text = text;\n this.render();\n console.log(''); // New line after completion\n }\n\n private render(): void {\n const percentage = Math.round((this.current / this.total) * 100);\n const filledWidth = Math.round((this.current / this.total) * this.width);\n const emptyWidth = this.width - filledWidth;\n\n if (this.useMultiLine) {\n this.renderMultiLine(percentage, filledWidth, emptyWidth);\n } else {\n this.renderSingleLine(percentage, filledWidth, emptyWidth);\n }\n }\n\n private renderMultiLine(percentage: number, filledWidth: number, emptyWidth: number): void {\n const currentText = `${this.getStyledPrefix()} ${this.text}`;\n\n // 构建进度条\n let bar: string;\n switch (this.style) {\n case 'gradient':\n bar = this.renderGradientBar(filledWidth, emptyWidth);\n break;\n case 'fancy':\n bar = this.renderFancyBar(filledWidth, emptyWidth);\n break;\n case 'minimal':\n bar = this.renderMinimalBar(filledWidth, emptyWidth);\n break;\n case 'blocks':\n bar = this.renderBlockBar(filledWidth, emptyWidth);\n break;\n default:\n bar = this.renderDefaultBar(filledWidth, emptyWidth);\n }\n\n let progressLine = `(${this.current}/${this.total}) [${bar}] ${this.getStyledPercentage(percentage)}`;\n\n // Add stats if enabled\n if (this.options.showStats && this.startTime > 0) {\n const elapsed = Date.now() - this.startTime;\n const speed = elapsed > 0 ? Math.round((this.current / elapsed) * 1000) : 0;\n if (speed > 0) {\n progressLine += ` ${chalk.gray(`${speed}/s`)}`;\n }\n }\n\n if (this.isFirstRender) {\n // 第一次渲染:输出两行\n console.log(currentText);\n console.log(progressLine);\n this.isFirstRender = false;\n } else {\n // 后续更新:回到两行前的位置,分别更新这两行\n // 光标上移两行,清除文字行,输出新文字行\n process.stdout.write('\\x1b[2A\\r\\x1b[2K' + currentText + '\\n');\n // 清除进度条行,输出新进度条行\n process.stdout.write('\\r\\x1b[2K' + progressLine);\n }\n\n this.lastRender = progressLine;\n\n if (this.current >= this.total) {\n process.stdout.write('\\n');\n }\n }\n\n private renderSingleLine(percentage: number, filledWidth: number, emptyWidth: number): void {\n let bar: string;\n switch (this.style) {\n case 'gradient':\n bar = this.renderGradientBar(filledWidth, emptyWidth);\n break;\n case 'fancy':\n bar = this.renderFancyBar(filledWidth, emptyWidth);\n break;\n case 'minimal':\n bar = this.renderMinimalBar(filledWidth, emptyWidth);\n break;\n case 'blocks':\n bar = this.renderBlockBar(filledWidth, emptyWidth);\n break;\n default:\n bar = this.renderDefaultBar(filledWidth, emptyWidth);\n }\n\n let progressText = `${this.getStyledPrefix()} ${this.text} (${this.current}/${this.total}) [${bar}] ${this.getStyledPercentage(percentage)}`;\n\n // Add stats if enabled\n if (this.options.showStats && this.startTime > 0) {\n const elapsed = Date.now() - this.startTime;\n const speed = elapsed > 0 ? Math.round((this.current / elapsed) * 1000) : 0;\n if (speed > 0) {\n progressText += ` ${chalk.gray(`${speed}/s`)}`;\n }\n }\n\n // Clear previous line and render new one\n if (this.lastRender) {\n process.stdout.write('\\r\\x1b[K');\n }\n\n process.stdout.write(progressText);\n this.lastRender = progressText;\n\n if (this.current >= this.total) {\n process.stdout.write('\\n');\n }\n }\n\n private renderGradientBar(filledWidth: number, emptyWidth: number): string {\n const colors = [chalk.red, chalk.yellow, chalk.green, chalk.cyan, chalk.blue, chalk.magenta];\n\n let filledBar = '';\n for (let i = 0; i < filledWidth; i++) {\n const colorIndex = Math.floor((i / this.width) * colors.length);\n const colorFn = colors[Math.min(colorIndex, colors.length - 1)];\n if (colorFn) {\n filledBar += colorFn('█');\n }\n }\n\n const emptyBar = chalk.gray('░'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderFancyBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.cyan('▓'.repeat(filledWidth));\n const emptyBar = chalk.gray('░'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderMinimalBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.white('━'.repeat(filledWidth));\n const emptyBar = chalk.gray('─'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderBlockBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.green('■'.repeat(filledWidth));\n const emptyBar = chalk.gray('□'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderDefaultBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.green('█'.repeat(filledWidth));\n const emptyBar = chalk.gray('░'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private getStyledPrefix(): string {\n switch (this.style) {\n case 'gradient':\n return chalk.magenta('▶');\n case 'fancy':\n return chalk.cyan('★');\n case 'minimal':\n return chalk.gray('•');\n case 'blocks':\n return chalk.green('◆');\n default:\n return chalk.cyan('●');\n }\n }\n\n private getStyledPercentage(percentage: number): string {\n if (percentage < 25) return chalk.red.bold(`${percentage}%`);\n if (percentage < 50) return chalk.yellow.bold(`${percentage}%`);\n if (percentage < 75) return chalk.blue.bold(`${percentage}%`);\n if (percentage < 100) return chalk.cyan.bold(`${percentage}%`);\n return chalk.green.bold(`${percentage}%`);\n }\n\n /**\n * Create a gradient percentage progress bar\n */\n static createGradient(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, {\n style: 'gradient',\n showStats: true,\n multiLine: true,\n });\n }\n\n /**\n * Create a fancy percentage progress bar\n */\n static createFancy(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, { style: 'fancy', showStats: true, multiLine: true });\n }\n\n /**\n * Create a minimal percentage progress bar\n */\n static createMinimal(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, {\n style: 'minimal',\n showStats: false,\n multiLine: true,\n });\n }\n\n /**\n * Create a block-style percentage progress bar\n */\n static createBlocks(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, { style: 'blocks', showStats: true, multiLine: true });\n }\n}\n\n/**\n * Progress manager for batch operations\n */\nexport class BatchProgressManager {\n private bars: Map<string, ProgressBar> = new Map();\n private totalOperations = 0;\n private completedOperations = 0;\n\n createBar(id: string, options?: ProgressBarOptions): ProgressBar {\n const bar = new ProgressBar(options);\n this.bars.set(id, bar);\n return bar;\n }\n\n getBar(id: string): ProgressBar | undefined {\n return this.bars.get(id);\n }\n\n setTotal(total: number): void {\n this.totalOperations = total;\n }\n\n updateOverall(text: string): void {\n const percentage =\n this.totalOperations > 0\n ? Math.round((this.completedOperations / this.totalOperations) * 100)\n : 0;\n\n console.log(\n chalk.cyan(\n `📊 Overall Progress: ${percentage}% (${this.completedOperations}/${this.totalOperations})`\n )\n );\n if (text) {\n console.log(chalk.gray(` → ${text}`));\n }\n }\n\n completeOperation(text?: string): void {\n this.completedOperations++;\n if (text) {\n this.updateOverall(text);\n }\n }\n\n cleanup(): void {\n this.bars.forEach((bar) => bar.stop());\n this.bars.clear();\n }\n}\n","/**\n * Security Command\n *\n * CLI command to perform security vulnerability scanning and automated fixes.\n * Integrates with npm audit and snyk for comprehensive security analysis.\n */\n\nimport { spawnSync } from 'child_process';\nimport * as fs from 'fs-extra';\nimport * as path from 'path';\nimport { OutputFormat, OutputFormatter } from '../formatters/outputFormatter.js';\nimport { ProgressBar } from '../formatters/progressBar.js';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\n\nexport interface SecurityCommandOptions {\n workspace?: string;\n format?: OutputFormat;\n audit?: boolean;\n fixVulns?: boolean;\n severity?: 'low' | 'moderate' | 'high' | 'critical';\n includeDev?: boolean;\n snyk?: boolean;\n verbose?: boolean;\n color?: boolean;\n}\n\nexport interface SecurityReport {\n summary: {\n totalVulnerabilities: number;\n critical: number;\n high: number;\n moderate: number;\n low: number;\n info: number;\n };\n vulnerabilities: Vulnerability[];\n recommendations: SecurityRecommendation[];\n metadata: {\n scanDate: string;\n scanTools: string[];\n workspacePath: string;\n };\n}\n\nexport interface Vulnerability {\n id: string;\n package: string;\n severity: 'low' | 'moderate' | 'high' | 'critical';\n title: string;\n url: string;\n range: string;\n fixAvailable: boolean | string;\n fixVersion?: string;\n paths: string[];\n cwe?: string[];\n cve?: string[];\n}\n\nexport interface SecurityRecommendation {\n package: string;\n currentVersion: string;\n recommendedVersion: string;\n type: 'update' | 'remove' | 'replace';\n reason: string;\n impact: string;\n}\n\nexport class SecurityCommand {\n constructor(private readonly outputFormatter: OutputFormatter) {}\n\n /**\n * Execute the security command\n */\n async execute(options: SecurityCommandOptions = {}): Promise<void> {\n let progressBar: ProgressBar | undefined;\n\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n // Show loading with progress bar\n progressBar = new ProgressBar({\n text: 'Performing security analysis...',\n });\n progressBar.start();\n\n if (options.verbose) {\n console.log(StyledText.iconAnalysis('Security vulnerability scanning'));\n console.log(StyledText.muted(`Workspace: ${options.workspace || process.cwd()}`));\n console.log(StyledText.muted(`Severity filter: ${options.severity || 'all'}`));\n console.log('');\n }\n\n // Execute security scan\n const report = await this.performSecurityScan(options);\n\n progressBar.succeed('Security analysis completed');\n\n // Format and display results\n const formattedOutput = this.outputFormatter.formatSecurityReport(report);\n console.log(formattedOutput);\n\n // Show recommendations if available\n if (report.recommendations.length > 0) {\n this.showRecommendations(report);\n }\n\n // Auto-fix vulnerabilities if requested\n if (options.fixVulns) {\n await this.autoFixVulnerabilities(report, options);\n }\n\n // Exit with appropriate code based on findings\n const exitCode = report.summary.critical > 0 ? 1 : 0;\n process.exit(exitCode);\n } catch (error) {\n if (progressBar) {\n progressBar.fail('Security analysis failed');\n }\n\n console.error(StyledText.iconError('Error performing security scan:'));\n console.error(StyledText.error(String(error)));\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'));\n console.error(StyledText.muted(error.stack || 'No stack trace available'));\n }\n\n process.exit(1);\n }\n }\n\n /**\n * Perform comprehensive security scan\n */\n private async performSecurityScan(options: SecurityCommandOptions): Promise<SecurityReport> {\n const workspacePath = options.workspace || process.cwd();\n const vulnerabilities: Vulnerability[] = [];\n const recommendations: SecurityRecommendation[] = [];\n\n // Check if package.json exists\n const packageJsonPath = path.join(workspacePath, 'package.json');\n if (!(await fs.pathExists(packageJsonPath))) {\n throw new Error(`No package.json found in ${workspacePath}`);\n }\n\n // Run npm audit\n if (options.audit !== false) {\n const npmVulns = await this.runNpmAudit(workspacePath, options);\n vulnerabilities.push(...npmVulns);\n }\n\n // Run snyk scan if available\n if (options.snyk) {\n const snykVulns = await this.runSnykScan(workspacePath, options);\n vulnerabilities.push(...snykVulns);\n }\n\n // Generate recommendations\n recommendations.push(...this.generateRecommendations(vulnerabilities));\n\n // Filter by severity if specified\n const filteredVulnerabilities = options.severity\n ? vulnerabilities.filter(\n (v) => this.severityToNumber(v.severity) >= this.severityToNumber(options.severity!)\n )\n : vulnerabilities;\n\n return {\n summary: this.generateSummary(filteredVulnerabilities),\n vulnerabilities: filteredVulnerabilities,\n recommendations: recommendations,\n metadata: {\n scanDate: new Date().toISOString(),\n scanTools: ['npm-audit', ...(options.snyk ? ['snyk'] : [])],\n workspacePath: workspacePath,\n },\n };\n }\n\n /**\n * Run npm audit scan\n */\n private async runNpmAudit(\n workspacePath: string,\n options: SecurityCommandOptions\n ): Promise<Vulnerability[]> {\n const auditArgs = ['audit', '--json'];\n\n if (!options.includeDev) {\n auditArgs.push('--omit=dev');\n }\n\n const result = spawnSync('npm', auditArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n if (result.error) {\n throw new Error(`npm audit failed: ${result.error.message}`);\n }\n\n if (result.status === 1) {\n // npm audit returns 1 when vulnerabilities are found\n try {\n const auditData = JSON.parse(result.stdout);\n return this.parseNpmAuditResults(auditData);\n } catch (parseError) {\n throw new Error(`Failed to parse npm audit output: ${parseError}`);\n }\n } else if (result.status === 0) {\n try {\n const auditData = JSON.parse(result.stdout);\n return this.parseNpmAuditResults(auditData);\n } catch (parseError) {\n throw new Error(`Failed to parse npm audit output: ${parseError}`);\n }\n } else {\n throw new Error(`npm audit failed with status ${result.status}: ${result.stderr}`);\n }\n }\n\n /**\n * Run snyk scan\n */\n private async runSnykScan(\n workspacePath: string,\n options: SecurityCommandOptions\n ): Promise<Vulnerability[]> {\n try {\n // Check if snyk is installed\n const versionResult = spawnSync('snyk', ['--version'], { stdio: 'pipe' });\n if (versionResult.error) {\n throw versionResult.error;\n }\n\n const snykArgs = ['test', '--json'];\n\n if (!options.includeDev) {\n snykArgs.push('--dev');\n }\n\n const result = spawnSync('snyk', snykArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n if (result.error) {\n throw result.error;\n }\n\n if (result.status !== 0 && result.status !== 1) {\n throw new Error(`Snyk scan failed with status ${result.status}: ${result.stderr}`);\n }\n\n const snykData = JSON.parse(result.stdout);\n return this.parseSnykResults(snykData);\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n console.warn(StyledText.iconWarning('Snyk not found. Install with: npm install -g snyk'));\n return [];\n }\n throw new Error(`Snyk scan failed: ${error.message}`);\n }\n }\n\n /**\n * Parse npm audit results\n */\n private parseNpmAuditResults(auditData: any): Vulnerability[] {\n const vulnerabilities: Vulnerability[] = [];\n\n if (!auditData.vulnerabilities) {\n return vulnerabilities;\n }\n\n for (const [id, vuln] of Object.entries(auditData.vulnerabilities)) {\n const vulnerability = vuln as any;\n\n vulnerabilities.push({\n id: id,\n package: vulnerability.name,\n severity: vulnerability.severity,\n title: vulnerability.title || vulnerability.name,\n url: vulnerability.url || `https://npmjs.com/advisories/${id}`,\n range: vulnerability.range,\n fixAvailable: vulnerability.fixAvailable,\n fixVersion: vulnerability.fixAvailable === true ? vulnerability.fixAvailable : undefined,\n paths: vulnerability.via?.map((v: any) => v.source || v.name) || [vulnerability.name],\n cwe: vulnerability.cwe,\n cve: vulnerability.cve,\n });\n }\n\n return vulnerabilities;\n }\n\n /**\n * Parse snyk results\n */\n private parseSnykResults(snykData: any): Vulnerability[] {\n const vulnerabilities: Vulnerability[] = [];\n\n if (!snykData.vulnerabilities) {\n return vulnerabilities;\n }\n\n for (const vuln of snykData.vulnerabilities) {\n vulnerabilities.push({\n id: vuln.id,\n package: vuln.packageName,\n severity: vuln.severity,\n title: vuln.title,\n url: vuln.url,\n range: vuln.semver?.vulnerable?.join(' || ') || vuln.version,\n fixAvailable: vuln.fixedIn?.length > 0,\n fixVersion: vuln.fixedIn?.[0],\n paths: vuln.from || [vuln.packageName],\n cwe: vuln.identifiers?.CWE || [],\n cve: vuln.identifiers?.CVE || [],\n });\n }\n\n return vulnerabilities;\n }\n\n /**\n * Generate security recommendations\n */\n private generateRecommendations(vulnerabilities: Vulnerability[]): SecurityRecommendation[] {\n const recommendations: SecurityRecommendation[] = [];\n const packages = new Set(vulnerabilities.map((v) => v.package));\n\n for (const pkg of packages) {\n const pkgVulns = vulnerabilities.filter((v) => v.package === pkg);\n const criticalVulns = pkgVulns.filter(\n (v) => v.severity === 'critical' || v.severity === 'high'\n );\n\n if (criticalVulns.length > 0) {\n const fixVersions = [\n ...new Set(\n criticalVulns.map((v) => v.fixVersion).filter((v) => v && typeof v === 'string')\n ),\n ];\n\n if (fixVersions.length > 0) {\n const currentVersion = pkgVulns[0]?.range?.split(' ')[0] || 'unknown';\n const recommendedVersion = fixVersions[0] || 'unknown';\n\n recommendations.push({\n package: pkg,\n currentVersion: currentVersion,\n recommendedVersion: recommendedVersion,\n type: 'update',\n reason: `${criticalVulns.length} critical vulnerabilities found`,\n impact: 'High - Security vulnerability fix',\n });\n }\n }\n }\n\n return recommendations;\n }\n\n /**\n * Generate summary from vulnerabilities\n */\n private generateSummary(vulnerabilities: Vulnerability[]): SecurityReport['summary'] {\n const summary = {\n totalVulnerabilities: vulnerabilities.length,\n critical: 0,\n high: 0,\n moderate: 0,\n low: 0,\n info: 0,\n };\n\n for (const vuln of vulnerabilities) {\n const severity = vuln.severity as string;\n switch (severity) {\n case 'critical':\n summary.critical++;\n break;\n case 'high':\n summary.high++;\n break;\n case 'moderate':\n summary.moderate++;\n break;\n case 'low':\n summary.low++;\n break;\n case 'info':\n summary.info++;\n break;\n default:\n summary.info++;\n break;\n }\n }\n\n return summary;\n }\n\n /**\n * Convert severity string to number for filtering\n */\n private severityToNumber(severity: string): number {\n switch (severity) {\n case 'critical':\n return 4;\n case 'high':\n return 3;\n case 'moderate':\n return 2;\n case 'low':\n return 1;\n case 'info':\n return 0;\n default:\n return 0;\n }\n }\n\n /**\n * Show security recommendations\n */\n private showRecommendations(report: SecurityReport): void {\n if (report.recommendations.length === 0) {\n return;\n }\n\n console.log('\\n' + StyledText.iconInfo('Security Recommendations:'));\n\n for (const rec of report.recommendations) {\n console.log(\n ` ${StyledText.iconWarning()} ${rec.package}: ${rec.currentVersion} → ${rec.recommendedVersion}`\n );\n console.log(` ${StyledText.muted(rec.reason)}`);\n console.log(` ${StyledText.muted(rec.impact)}`);\n }\n\n console.log('');\n console.log(StyledText.iconUpdate('Run with --fix-vulns to apply automatic fixes'));\n }\n\n /**\n * Auto-fix vulnerabilities\n */\n private async autoFixVulnerabilities(\n report: SecurityReport,\n options: SecurityCommandOptions\n ): Promise<void> {\n if (report.recommendations.length === 0) {\n console.log(StyledText.iconSuccess('No security fixes available'));\n return;\n }\n\n console.log('\\n' + StyledText.iconUpdate('Applying security fixes...'));\n\n const workspacePath = options.workspace || process.cwd();\n const fixableVulns = report.recommendations.filter((r) => r.type === 'update');\n\n if (fixableVulns.length === 0) {\n console.log(StyledText.iconInfo('No automatic fixes available'));\n return;\n }\n\n try {\n // Run npm audit fix\n const fixArgs = ['audit', 'fix'];\n if (!options.includeDev) {\n fixArgs.push('--omit=dev');\n }\n\n const result = spawnSync('npm', fixArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: 'inherit',\n });\n\n if (result.error) {\n throw result.error;\n }\n\n if (result.status !== 0) {\n throw new Error(`npm audit fix failed with status ${result.status}`);\n }\n\n console.log(StyledText.iconSuccess('Security fixes applied successfully'));\n\n // Re-run scan to verify fixes\n console.log(StyledText.iconInfo('Re-running security scan to verify fixes...'));\n const newReport = await this.performSecurityScan({ ...options, fixVulns: false });\n\n if (newReport.summary.critical === 0 && newReport.summary.high === 0) {\n console.log(\n StyledText.iconSuccess('All critical and high severity vulnerabilities have been fixed!')\n );\n } else {\n console.log(\n StyledText.iconWarning(\n `${newReport.summary.critical} critical and ${newReport.summary.high} high severity vulnerabilities remain`\n )\n );\n }\n } catch (error: any) {\n console.error(StyledText.iconError('Failed to apply security fixes:'));\n console.error(StyledText.error(error.message));\n }\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: SecurityCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal');\n }\n\n // Validate severity\n if (options.severity && !['low', 'moderate', 'high', 'critical'].includes(options.severity)) {\n errors.push('Invalid severity. Must be one of: low, moderate, high, critical');\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nSecurity vulnerability scanning and automated fixes\n\nUsage:\n pcu security [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --audit Perform npm audit scan (default: true)\n --fix-vulns Automatically fix vulnerabilities\n --severity <level> Filter by severity: low, moderate, high, critical\n --include-dev Include dev dependencies in scan\n --snyk Include Snyk scan (requires snyk CLI)\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu security # Basic security scan\n pcu security --fix-vulns # Scan and fix vulnerabilities\n pcu security --severity high # Show only high severity issues\n pcu security --snyk # Include Snyk scan\n pcu security --format json # Output as JSON\n\nExit Codes:\n 0 No vulnerabilities found\n 1 Vulnerabilities found\n 2 Error occurred\n `;\n }\n}\n","/**\n * Interactive Prompts\n *\n * Provides smart prompts and auto-completion for CLI commands\n */\n\nimport { FileSystemService } from '@pcu/core';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { StyledText } from '../themes/colorTheme.js';\n\nexport interface AutoCompleteOption {\n name: string;\n value: string;\n description?: string;\n}\n\nexport class InteractivePrompts {\n private fsService: FileSystemService;\n\n constructor() {\n this.fsService = new FileSystemService();\n }\n\n /**\n * Interactive package selection with search\n */\n async selectPackages(\n packages: Array<{ name: string; current: string; latest: string; type: string }>\n ): Promise<string[]> {\n if (packages.length === 0) {\n return [];\n }\n\n const choices = packages.map((pkg) => ({\n name: this.formatPackageChoice(pkg),\n value: pkg.name,\n checked: false,\n }));\n\n const answers = await inquirer.prompt({\n type: 'checkbox',\n name: 'selectedPackages',\n message: StyledText.iconPackage('Select packages to update:'),\n choices,\n pageSize: 15,\n validate: (input: unknown) => {\n const selected = input as string[];\n return selected.length > 0 || 'Please select at least one package';\n },\n });\n\n return answers.selectedPackages;\n }\n\n /**\n * Interactive catalog selection\n */\n async selectCatalog(catalogs: string[]): Promise<string | null> {\n if (catalogs.length === 0) {\n return null;\n }\n\n if (catalogs.length === 1) {\n return catalogs[0] ?? null;\n }\n\n const choices = [\n { name: 'All catalogs', value: 'all' },\n ...catalogs.map((name) => ({ name, value: name })),\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'catalog',\n message: StyledText.iconCatalog('Select catalog to update:'),\n choices,\n pageSize: 10,\n },\n ]);\n\n return answers.catalog === 'all' ? null : answers.catalog;\n }\n\n /**\n * Update strategy selection\n */\n async selectUpdateStrategy(): Promise<string> {\n const strategies = [\n { name: 'Latest (recommended)', value: 'latest' },\n { name: 'Greatest (highest version)', value: 'greatest' },\n { name: 'Minor (non-breaking)', value: 'minor' },\n { name: 'Patch (bug fixes only)', value: 'patch' },\n { name: 'Newest (latest release)', value: 'newest' },\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'strategy',\n message: StyledText.iconUpdate('Select update strategy:'),\n choices: strategies,\n },\n ]);\n\n return answers.strategy;\n }\n\n /**\n * Confirm dangerous operations\n */\n async confirmDangerousOperation(operation: string, details?: string): Promise<boolean> {\n console.log('');\n if (details) {\n console.log(chalk.yellow('⚠️ Warning:'), details);\n }\n\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirmed',\n message: StyledText.warning(`Are you sure you want to ${operation}?`),\n default: false,\n },\n ]);\n\n return answers.confirmed;\n }\n\n /**\n * Auto-complete for package names (using list as fallback)\n */\n async autoCompletePackage(\n packages: string[],\n message: string = 'Select package:'\n ): Promise<string> {\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'package',\n message,\n choices: packages.map((pkg) => ({ name: pkg, value: pkg })),\n pageSize: 10,\n },\n ]);\n\n return answers.package;\n }\n\n /**\n * Workspace path selection with auto-complete\n */\n async selectWorkspacePath(): Promise<string> {\n const currentDir = process.cwd();\n const choices = [\n { name: `Current directory (${currentDir})`, value: currentDir },\n { name: 'Browse for directory...', value: 'browse' },\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'path',\n message: StyledText.icon('📁', 'Select workspace directory:'),\n choices,\n },\n ]);\n\n if (answers.path === 'browse') {\n return this.browseDirectory();\n }\n\n return answers.path;\n }\n\n /**\n * Browse directory structure\n */\n private async browseDirectory(currentPath = process.cwd()): Promise<string> {\n const directoryNames = await this.fsService.listDirectories(currentPath);\n const choices = [\n { name: '.. (parent directory)', value: '..' },\n { name: `. (current: ${currentPath})`, value: '.' },\n ...directoryNames.map((name: string) => ({\n name: `📁 ${name}`,\n value: `${currentPath}/${name}`,\n })),\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'selected',\n message: `Browse: ${currentPath}`,\n choices,\n pageSize: 15,\n },\n ]);\n\n if (answers.selected === '.') {\n return currentPath;\n }\n\n if (answers.selected === '..') {\n const parent = currentPath.split('/').slice(0, -1).join('/') || '/';\n return this.browseDirectory(parent);\n }\n\n // Check if this directory contains a pnpm workspace\n const workspaceFiles = ['pnpm-workspace.yaml', 'pnpm-workspace.yml'];\n let hasWorkspace = false;\n for (const file of workspaceFiles) {\n if (await this.fsService.exists(`${answers.selected}/${file}`)) {\n hasWorkspace = true;\n break;\n }\n }\n\n if (hasWorkspace) {\n const confirm = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'useThis',\n message: `Use ${answers.selected} as workspace?`,\n default: true,\n },\n ]);\n\n if (confirm.useThis) {\n return answers.selected;\n }\n }\n\n return this.browseDirectory(answers.selected);\n }\n\n /**\n * Multi-step configuration wizard\n */\n async configurationWizard(): Promise<any> {\n console.log(chalk.bold.blue('\\n🧙♂️ Configuration Wizard\\n'));\n\n const themeAnswer = await inquirer.prompt({\n type: 'list',\n name: 'theme',\n message: 'Select color theme:',\n choices: [\n { name: 'Default - Balanced colors', value: 'default' },\n { name: 'Modern - Vibrant colors', value: 'modern' },\n { name: 'Minimal - Clean and simple', value: 'minimal' },\n { name: 'Neon - High contrast', value: 'neon' },\n ],\n default: 'default',\n });\n\n const interactiveAnswer = await inquirer.prompt({\n type: 'confirm',\n name: 'interactive',\n message: 'Enable interactive mode by default?',\n default: true,\n });\n\n const backupAnswer = await inquirer.prompt({\n type: 'confirm',\n name: 'backup',\n message: 'Create backups before updates?',\n default: true,\n });\n\n const strategyAnswer = await inquirer.prompt({\n type: 'list',\n name: 'updateStrategy',\n message: 'Default update strategy:',\n choices: [\n { name: 'Latest stable versions', value: 'latest' },\n { name: 'Minor updates (non-breaking)', value: 'minor' },\n { name: 'Patch updates (bug fixes)', value: 'patch' },\n ],\n default: 'latest',\n });\n\n const timeoutAnswer = await inquirer.prompt({\n type: 'number',\n name: 'timeout',\n message: 'Network timeout (seconds):',\n default: 30,\n validate: (input: number | undefined) => {\n if (input === undefined) return 'Timeout is required';\n return input > 0 || 'Timeout must be positive';\n },\n });\n\n const answers = {\n ...themeAnswer,\n ...interactiveAnswer,\n ...backupAnswer,\n ...strategyAnswer,\n ...timeoutAnswer,\n };\n\n return answers;\n }\n\n /**\n * Impact preview before update\n */\n async previewImpact(impact: any): Promise<boolean> {\n console.log(chalk.bold.blue('\\n📊 Impact Preview\\n'));\n\n // Display impact summary\n console.log(`Packages to update: ${impact.totalUpdates}`);\n console.log(`Risk level: ${impact.riskLevel}`);\n console.log(`Affected packages: ${impact.affectedCount}`);\n\n if (impact.securityUpdates > 0) {\n console.log(StyledText.iconSecurity(`${impact.securityUpdates} security updates`));\n }\n\n console.log('');\n\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'proceed',\n message: 'Proceed with update?',\n default: true,\n },\n ]);\n\n return answers.proceed;\n }\n\n /**\n * Error recovery options\n */\n async errorRecoveryOptions(error: string): Promise<string> {\n const options = [\n { name: 'Retry operation', value: 'retry' },\n { name: 'Skip this package', value: 'skip' },\n { name: 'Continue with remaining', value: 'continue' },\n { name: 'Abort operation', value: 'abort' },\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'action',\n message: StyledText.iconError(`Error: ${error}`),\n choices: options,\n },\n ]);\n\n return answers.action;\n }\n\n /**\n * Confirm tool update\n */\n async confirmUpdate(message: string): Promise<boolean> {\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'update',\n message: StyledText.iconUpdate(message),\n default: true,\n },\n ]);\n\n return answers.update;\n }\n\n /**\n * Format package choice for display\n */\n private formatPackageChoice(pkg: any): string {\n const updateTypeColor: Record<string, any> = {\n major: chalk.red,\n minor: chalk.yellow,\n patch: chalk.green,\n };\n\n const typeColor = updateTypeColor[pkg.type] || chalk.gray;\n\n return `${pkg.name} ${chalk.dim(pkg.current)} → ${typeColor(pkg.latest)} ${chalk.dim(`(${pkg.type})`)}`;\n }\n}\n\n/**\n * Auto-completion utilities\n */\nexport class AutoCompleteManager {\n static async suggestWorkspaces(current: string): Promise<string[]> {\n const suggestions: string[] = [];\n\n // Common workspace patterns\n const patterns = [\n 'pnpm-workspace.yaml',\n 'pnpm-workspace.yml',\n '**/*/pnpm-workspace.yaml',\n '**/*/pnpm-workspace.yml',\n ];\n\n for (const pattern of patterns) {\n try {\n const { glob } = await import('glob');\n const matches = await glob(pattern);\n matches.forEach((match: string) => {\n const dir = match.replace(/\\/pnpm-workspace\\.ya?ml$/, '');\n if (!suggestions.includes(dir)) {\n suggestions.push(dir);\n }\n });\n } catch {\n // Ignore errors\n }\n }\n\n return suggestions.filter((s) => s.toLowerCase().includes(current.toLowerCase()));\n }\n\n static async suggestCatalogs(): Promise<string[]> {\n return [];\n }\n\n static async suggestPackages(): Promise<string[]> {\n return [];\n }\n}\n\n/**\n * Interactive command builder\n */\nexport class InteractiveCommandBuilder {\n static async buildCommand(): Promise<{\n command: string;\n options: Record<string, any>;\n }> {\n const baseCommand = await inquirer.prompt([\n {\n type: 'list',\n name: 'command',\n message: 'What would you like to do?',\n choices: [\n { name: 'Check for updates', value: 'check' },\n { name: 'Update dependencies', value: 'update' },\n { name: 'Analyze impact', value: 'analyze' },\n { name: 'Show workspace info', value: 'workspace' },\n ],\n },\n ]);\n\n const options: Record<string, any> = {};\n\n // Common options\n const common = await inquirer.prompt([\n {\n type: 'list',\n name: 'format',\n message: 'Output format:',\n choices: [\n { name: 'Table (rich)', value: 'table' },\n { name: 'JSON', value: 'json' },\n { name: 'YAML', value: 'yaml' },\n { name: 'Minimal', value: 'minimal' },\n ],\n default: 'table',\n },\n ]);\n\n options.format = common.format;\n\n // Command-specific options\n switch (baseCommand.command) {\n case 'update':\n const updateOpts = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'interactive',\n message: 'Interactive mode?',\n default: true,\n },\n {\n type: 'confirm',\n name: 'dryRun',\n message: 'Dry run mode?',\n default: false,\n },\n {\n type: 'confirm',\n name: 'backup',\n message: 'Create backup?',\n default: true,\n },\n ]);\n Object.assign(options, updateOpts);\n break;\n\n case 'check':\n const checkOpts = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'includePrerelease',\n message: 'Include pre-release versions?',\n default: false,\n },\n ]);\n options.prerelease = checkOpts.includePrerelease;\n break;\n }\n\n return {\n command: baseCommand.command,\n options,\n };\n }\n}\n","/**\n * Update Command\n *\n * CLI command to update catalog dependencies.\n * Supports interactive mode, dry-run, and various update strategies.\n */\n\nimport { CatalogUpdateService, UpdateOptions, UpdatePlan, UpdateTarget } from '@pcu/core';\nimport { ConfigLoader } from '@pcu/utils';\nimport { OutputFormat, OutputFormatter } from '../formatters/outputFormatter.js';\nimport { ProgressBar } from '../formatters/progressBar.js';\nimport { InteractivePrompts } from '../interactive/interactivePrompts.js';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\n\nexport interface UpdateCommandOptions {\n workspace?: string;\n catalog?: string;\n format?: OutputFormat;\n target?: UpdateTarget;\n interactive?: boolean;\n dryRun?: boolean;\n force?: boolean;\n prerelease?: boolean;\n include?: string[];\n exclude?: string[];\n createBackup?: boolean;\n verbose?: boolean;\n color?: boolean;\n}\n\nexport class UpdateCommand {\n private readonly updateService: CatalogUpdateService;\n\n constructor(updateService: CatalogUpdateService) {\n this.updateService = updateService;\n }\n\n /**\n * Execute the update command\n */\n async execute(options: UpdateCommandOptions = {}): Promise<void> {\n let progressBar: ProgressBar | undefined;\n\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n // Create progress bar for the update process\n progressBar = new ProgressBar({\n text: '正在规划更新...',\n total: 4, // 4 main steps\n });\n progressBar.start('正在加载工作区配置...');\n\n // Load configuration file first\n const config = ConfigLoader.loadConfig(options.workspace || process.cwd());\n\n // Use format from CLI options first, then config file, then default\n const effectiveFormat = options.format || config.defaults?.format || 'table';\n\n // Create output formatter with effective format\n const formatter = new OutputFormatter(\n effectiveFormat as OutputFormat,\n options.color !== false\n );\n\n // Merge CLI options with configuration file settings\n const updateOptions: UpdateOptions = {\n workspacePath: options.workspace,\n catalogName: options.catalog,\n target: options.target || config.defaults?.target,\n includePrerelease: options.prerelease ?? config.defaults?.includePrerelease ?? false,\n // CLI include/exclude options take priority over config file\n include: options.include?.length ? options.include : config.include,\n exclude: options.exclude?.length ? options.exclude : config.exclude,\n interactive: options.interactive ?? config.defaults?.interactive ?? false,\n dryRun: options.dryRun ?? config.defaults?.dryRun ?? false,\n force: options.force ?? false,\n createBackup: options.createBackup ?? config.defaults?.createBackup ?? false,\n };\n\n // Step 1: Planning updates\n progressBar.update('正在检查包版本...', 1, 4);\n const plan = await this.updateService.planUpdates(updateOptions);\n\n // Step 2: Check if any updates found\n progressBar.update('正在分析更新...', 2, 4);\n\n if (!plan.updates.length) {\n progressBar.succeed('所有依赖包都是最新的');\n console.log(StyledText.iconSuccess('All dependencies are up to date!'));\n return;\n }\n\n console.log(\n StyledText.iconPackage(\n `Found ${plan.totalUpdates} update${plan.totalUpdates === 1 ? '' : 's'} available`\n )\n );\n\n // Interactive selection if enabled\n let finalPlan = plan;\n if (options.interactive) {\n finalPlan = await this.interactiveSelection(plan);\n if (!finalPlan.updates.length) {\n progressBar.warn('未选择任何更新');\n console.log(StyledText.iconWarning('No updates selected'));\n return;\n }\n }\n\n // Step 3: Apply updates\n progressBar.update('正在准备应用更新...', 3, 4);\n\n if (!options.dryRun) {\n // Replace the progress bar with one for applying updates\n progressBar.stop();\n progressBar = new ProgressBar({\n text: 'Applying updates...',\n total: finalPlan.updates.length,\n });\n progressBar.start('正在应用更新...');\n\n const result = await this.updateService.executeUpdates(finalPlan, updateOptions);\n progressBar.succeed(`Applied ${finalPlan.updates.length} updates`);\n\n console.log(formatter.formatUpdateResult(result));\n } else {\n progressBar.update('正在生成预览...', 4, 4);\n progressBar.succeed('更新预览完成');\n console.log(StyledText.iconInfo('Dry run - no changes made'));\n console.log(JSON.stringify(finalPlan, null, 2));\n }\n\n console.log(StyledText.iconComplete('Update process completed!'));\n } catch (error) {\n if (progressBar) {\n progressBar.fail('Operation failed');\n }\n\n if (error instanceof Error) {\n console.error(StyledText.iconError(`Error: ${error.message}`));\n } else {\n console.error(StyledText.iconError('Unknown error occurred'));\n }\n throw error;\n }\n }\n\n /**\n * Interactive update selection\n */\n private async interactiveSelection(plan: UpdatePlan): Promise<UpdatePlan> {\n const interactivePrompts = new InteractivePrompts();\n\n // Transform PlannedUpdate to the format expected by InteractivePrompts\n const packages = plan.updates.map((update) => ({\n name: update.packageName,\n current: update.currentVersion,\n latest: update.newVersion,\n type: update.updateType,\n }));\n\n const selectedPackageNames = await interactivePrompts.selectPackages(packages);\n\n // Filter the plan to only include selected packages\n const selectedUpdates = plan.updates.filter((update) =>\n selectedPackageNames.includes(update.packageName)\n );\n\n return {\n ...plan,\n updates: selectedUpdates,\n totalUpdates: selectedUpdates.length,\n };\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: UpdateCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal');\n }\n\n // Validate target\n if (\n options.target &&\n !['latest', 'greatest', 'minor', 'patch', 'newest'].includes(options.target)\n ) {\n errors.push('Invalid target. Must be one of: latest, greatest, minor, patch, newest');\n }\n\n // Interactive and dry-run conflict\n if (options.interactive && options.dryRun) {\n errors.push('Cannot use --interactive with --dry-run');\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nUpdate catalog dependencies\n\nUsage:\n pcu update [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --catalog <name> Update specific catalog only\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --target <type> Update target: latest, greatest, minor, patch, newest (default: latest)\n -i, --interactive Interactive mode to choose updates\n -d, --dry-run Preview changes without writing files\n --force Force updates even if conflicts exist\n --prerelease Include prerelease versions\n --include <pattern> Include packages matching pattern (can be used multiple times)\n --exclude <pattern> Exclude packages matching pattern (can be used multiple times)\n --create-backup Create backup files before updating\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu update # Update all catalogs\n pcu update --interactive # Interactive update selection\n pcu update --dry-run # Preview updates without applying\n pcu update --catalog react17 # Update specific catalog\n pcu update --target minor # Update to latest minor versions only\n pcu update --force # Force updates despite conflicts\n pcu update --include \"react*\" # Update only React packages\n\nExit Codes:\n 0 Updates completed successfully\n 1 Updates failed or were cancelled\n 2 Error occurred\n `;\n }\n}\n","#!/usr/bin/env node\n\n/**\n * pnpm-catalog-updates CLI Entry Point\n *\n * A CLI tool for checking and updating pnpm workspace catalog dependencies.\n * This is the main entry point that handles command parsing and execution.\n */\n\nimport { dirname, join } from 'path';\nimport { OutputFormat, OutputFormatter } from './formatters/outputFormatter.js';\n\n// Services and Dependencies\nimport {\n CatalogUpdateService,\n FileSystemService,\n FileWorkspaceRepository,\n NpmRegistryService,\n WorkspaceService,\n} from '@pcu/core';\n// CLI Commands\nimport { ConfigLoader, VersionChecker } from '@pcu/utils';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { CheckCommand } from './commands/checkCommand.js';\nimport { InitCommand } from './commands/initCommand.js';\nimport { SecurityCommand } from './commands/securityCommand.js';\nimport { UpdateCommand } from './commands/updateCommand.js';\nimport { InteractivePrompts } from './interactive/interactivePrompts.js';\nimport { StyledText, ThemeManager } from './themes/colorTheme.js';\n\n// Get package.json for version info\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));\n\n/**\n * Create service dependencies with configuration support\n */\nfunction createServices(workspacePath?: string) {\n const fileSystemService = new FileSystemService();\n const workspaceRepository = new FileWorkspaceRepository(fileSystemService);\n // Use factory method to create CatalogUpdateService with configuration\n const catalogUpdateService = CatalogUpdateService.createWithConfig(\n workspaceRepository,\n workspacePath\n );\n const workspaceService = new WorkspaceService(workspaceRepository);\n\n return {\n fileSystemService,\n workspaceRepository,\n catalogUpdateService,\n workspaceService,\n };\n}\n\n/**\n * Main CLI function\n */\nexport async function main(): Promise<void> {\n const program = new Command();\n\n // Parse arguments first to get workspace path\n let workspacePath: string | undefined;\n\n // Extract workspace path from arguments for service creation\n const workspaceIndex = process.argv.findIndex((arg) => arg === '-w' || arg === '--workspace');\n if (workspaceIndex !== -1 && workspaceIndex + 1 < process.argv.length) {\n workspacePath = process.argv[workspaceIndex + 1];\n }\n\n // Load configuration to check if version updates are enabled\n const config = ConfigLoader.loadConfig(workspacePath || process.cwd());\n\n // Check for version updates (skip in CI environments or if disabled)\n if (VersionChecker.shouldCheckForUpdates() && config.advanced?.checkForUpdates !== false) {\n try {\n const versionResult = await VersionChecker.checkVersion(packageJson.version, {\n skipPrompt: false,\n timeout: 3000, // Short timeout to not delay CLI startup\n });\n\n if (versionResult.shouldPrompt) {\n const didUpdate = await VersionChecker.promptAndUpdate(versionResult);\n if (didUpdate) {\n // Exit after successful update to allow user to restart with new version\n console.log(chalk.blue('Please run your command again to use the updated version.'));\n process.exit(0);\n }\n }\n } catch (error) {\n // Silently fail version check to not interrupt CLI usage (only show warning in verbose mode)\n if (process.argv.includes('-v') || process.argv.includes('--verbose')) {\n console.warn(chalk.yellow('⚠️ Could not check for updates:'), error);\n }\n }\n }\n\n // Create services with workspace path for configuration loading\n const services = createServices(workspacePath);\n\n // Configure the main command\n program\n .name('pcu')\n .description('A CLI tool to check and update pnpm workspace catalog dependencies')\n .option('--version', 'show version information')\n .option('-v, --verbose', 'enable verbose logging')\n .option('-w, --workspace <path>', 'workspace directory path')\n .option('--no-color', 'disable colored output')\n .option('-u, --update', 'shorthand for update command')\n .option('-c, --check', 'shorthand for check command')\n .option('-a, --analyze', 'shorthand for analyze command')\n .option('-s, --workspace-info', 'shorthand for workspace command')\n .option('-t, --theme', 'shorthand for theme command')\n .option('--security-audit', 'shorthand for security command')\n .option('--security-fix', 'shorthand for security --fix-vulns command');\n\n // Check command\n program\n .command('check')\n .alias('chk')\n .description('check for outdated catalog dependencies')\n .option('--catalog <name>', 'check specific catalog only')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .option(\n '-t, --target <type>',\n 'update target: latest, greatest, minor, patch, newest',\n 'latest'\n )\n .option('--prerelease', 'include prerelease versions')\n .option('--include <pattern>', 'include packages matching pattern', [])\n .option('--exclude <pattern>', 'exclude packages matching pattern', [])\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const checkCommand = new CheckCommand(services.catalogUpdateService);\n\n await checkCommand.execute({\n workspace: globalOptions.workspace,\n catalog: options.catalog,\n format: options.format,\n target: options.target,\n prerelease: options.prerelease,\n include: Array.isArray(options.include)\n ? options.include\n : [options.include].filter(Boolean),\n exclude: Array.isArray(options.exclude)\n ? options.exclude\n : [options.exclude].filter(Boolean),\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Update command\n program\n .command('update')\n .alias('u')\n .description('update catalog dependencies')\n .option('-i, --interactive', 'interactive mode to choose updates')\n .option('-d, --dry-run', 'preview changes without writing files')\n .option(\n '-t, --target <type>',\n 'update target: latest, greatest, minor, patch, newest',\n 'latest'\n )\n .option('--catalog <name>', 'update specific catalog only')\n .option('--include <pattern>', 'include packages matching pattern', [])\n .option('--exclude <pattern>', 'exclude packages matching pattern', [])\n .option('--force', 'force updates even if risky')\n .option('--prerelease', 'include prerelease versions')\n .option('-b, --create-backup', 'create backup files before updating')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const updateCommand = new UpdateCommand(services.catalogUpdateService);\n\n await updateCommand.execute({\n workspace: globalOptions.workspace,\n catalog: options.catalog,\n format: options.format,\n target: options.target,\n interactive: options.interactive,\n dryRun: options.dryRun,\n force: options.force,\n prerelease: options.prerelease,\n include: Array.isArray(options.include)\n ? options.include\n : [options.include].filter(Boolean),\n exclude: Array.isArray(options.exclude)\n ? options.exclude\n : [options.exclude].filter(Boolean),\n createBackup: options.createBackup,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Analyze command\n program\n .command('analyze')\n .alias('a')\n .description('analyze the impact of updating a specific dependency')\n .argument('<catalog>', 'catalog name')\n .argument('<package>', 'package name')\n .argument('[version]', 'new version (default: latest)')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (catalog, packageName, version, options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n );\n\n // Get latest version if not specified\n let targetVersion = version;\n if (!targetVersion) {\n // Create a temporary registry service for version fetching\n const tempRegistryService = new NpmRegistryService();\n targetVersion = (await tempRegistryService.getLatestVersion(packageName)).toString();\n }\n\n const analysis = await services.catalogUpdateService.analyzeImpact(\n catalog,\n packageName,\n targetVersion,\n globalOptions.workspace\n );\n\n const formattedOutput = formatter.formatImpactAnalysis(analysis);\n console.log(formattedOutput);\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Workspace command\n program\n .command('workspace')\n .alias('w')\n .description('workspace information and validation')\n .option('--validate', 'validate workspace configuration')\n .option('-s, --stats', 'show workspace statistics')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n );\n\n if (options.validate) {\n const report = await services.workspaceService.validateWorkspace(globalOptions.workspace);\n const formattedOutput = formatter.formatValidationReport(report);\n console.log(formattedOutput);\n process.exit(report.isValid ? 0 : 1);\n } else if (options.stats) {\n const stats = await services.workspaceService.getWorkspaceStats(globalOptions.workspace);\n const formattedOutput = formatter.formatWorkspaceStats(stats);\n console.log(formattedOutput);\n } else {\n const info = await services.workspaceService.getWorkspaceInfo(globalOptions.workspace);\n console.log(formatter.formatMessage(`Workspace: ${info.name}`, 'info'));\n console.log(formatter.formatMessage(`Path: ${info.path}`, 'info'));\n console.log(formatter.formatMessage(`Packages: ${info.packageCount}`, 'info'));\n console.log(formatter.formatMessage(`Catalogs: ${info.catalogCount}`, 'info'));\n\n if (info.catalogNames.length > 0) {\n console.log(\n formatter.formatMessage(`Catalog names: ${info.catalogNames.join(', ')}`, 'info')\n );\n }\n }\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Theme command\n program\n .command('theme')\n .alias('t')\n .description('configure color theme')\n .option('-s, --set <theme>', 'set theme: default, modern, minimal, neon')\n .option('-l, --list', 'list available themes')\n .option('-i, --interactive', 'interactive theme selection')\n .action(async (options, _command) => {\n try {\n if (options.list) {\n const themes = ThemeManager.listThemes();\n console.log(StyledText.iconInfo('Available themes:'));\n themes.forEach((theme) => {\n console.log(` • ${theme}`);\n });\n return;\n }\n\n if (options.set) {\n const themes = ThemeManager.listThemes();\n if (!themes.includes(options.set)) {\n console.error(StyledText.iconError(`Invalid theme: ${options.set}`));\n console.log(StyledText.muted(`Available themes: ${themes.join(', ')}`));\n process.exit(1);\n }\n\n ThemeManager.setTheme(options.set);\n console.log(StyledText.iconSuccess(`Theme set to: ${options.set}`));\n\n // Show a preview\n console.log('\\nTheme preview:');\n const theme = ThemeManager.getTheme();\n console.log(` ${theme.success('✓ Success message')}`);\n console.log(` ${theme.warning('⚠ Warning message')}`);\n console.log(` ${theme.error('✗ Error message')}`);\n console.log(` ${theme.info('ℹ Info message')}`);\n console.log(\n ` ${theme.major('Major update')} | ${theme.minor('Minor update')} | ${theme.patch('Patch update')}`\n );\n return;\n }\n\n if (options.interactive) {\n const interactivePrompts = new InteractivePrompts();\n const config = await interactivePrompts.configurationWizard();\n\n if (config.theme) {\n ThemeManager.setTheme(config.theme);\n console.log(StyledText.iconSuccess(`Theme configured: ${config.theme}`));\n }\n return;\n }\n\n // Default: show current theme and list\n const currentTheme = ThemeManager.getTheme();\n console.log(StyledText.iconInfo('Current theme settings:'));\n console.log(` Theme: ${currentTheme ? 'custom' : 'default'}`);\n console.log('\\nAvailable themes:');\n ThemeManager.listThemes().forEach((theme) => {\n console.log(` • ${theme}`);\n });\n console.log(\n StyledText.muted('\\nUse --set <theme> to change theme or --interactive for guided setup')\n );\n } catch (error) {\n console.error(StyledText.iconError('Error configuring theme:'), error);\n process.exit(1);\n }\n });\n\n // Security command\n program\n .command('security')\n .alias('sec')\n .description('security vulnerability scanning and automated fixes')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .option('--audit', 'perform npm audit scan (default: true)', true)\n .option('--fix-vulns', 'automatically fix vulnerabilities')\n .option('--severity <level>', 'filter by severity: low, moderate, high, critical')\n .option('--include-dev', 'include dev dependencies in scan')\n .option('--snyk', 'include Snyk scan (requires snyk CLI)')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n );\n\n const securityCommand = new SecurityCommand(formatter);\n\n await securityCommand.execute({\n workspace: globalOptions.workspace,\n format: options.format,\n audit: options.audit,\n fixVulns: options.fixVulns,\n severity: options.severity,\n includeDev: options.includeDev,\n snyk: options.snyk,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Init command\n program\n .command('init')\n .alias('i')\n .description('initialize PCU configuration and PNPM workspace')\n .option('--force', 'overwrite existing configuration file')\n .option('--full', 'generate full configuration with all options')\n .option(\n '--create-workspace',\n 'create PNPM workspace structure if missing (default: true)',\n true\n )\n .option('--no-create-workspace', 'skip creating PNPM workspace structure')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const initCommand = new InitCommand();\n\n await initCommand.execute({\n workspace: globalOptions.workspace,\n force: options.force,\n full: options.full,\n createWorkspace: options.createWorkspace,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Add help command\n program\n .command('help')\n .alias('h')\n .argument('[command]', 'command to get help for')\n .description('display help for command')\n .action((command) => {\n if (command) {\n const cmd = program.commands.find((c) => c.name() === command);\n if (cmd) {\n cmd.help();\n } else {\n console.log(chalk.red(`Unknown command: ${command}`));\n }\n } else {\n program.help();\n }\n });\n\n // Let commander handle help and version normally\n // program.exitOverride() removed to fix help/version output\n\n // Handle shorthand options and single-letter commands by rewriting arguments\n const args = [...process.argv];\n // Map single-letter command 'i' -> init (changed from interactive mode)\n if (\n args.includes('i') &&\n !args.some(\n (a) =>\n a === 'init' ||\n a === 'update' ||\n a === '-u' ||\n a === '--update' ||\n a === '-i' ||\n a === '--interactive'\n )\n ) {\n const index = args.findIndex((arg) => arg === 'i');\n args.splice(index, 1, 'init');\n }\n\n if (args.includes('-u') || args.includes('--update')) {\n const index = args.findIndex((arg) => arg === '-u' || arg === '--update');\n args.splice(index, 1, 'update');\n } else if (\n (args.includes('-i') || args.includes('--interactive')) &&\n !args.some((a) => a === 'update' || a === '-u' || a === '--update')\n ) {\n // Map standalone -i to `update -i`\n const index = args.findIndex((arg) => arg === '-i' || arg === '--interactive');\n // Replace the flag position with 'update' and keep the flag after it\n args.splice(index, 1, 'update', '-i');\n } else if (args.includes('-c') || args.includes('--check')) {\n const index = args.findIndex((arg) => arg === '-c' || arg === '--check');\n args.splice(index, 1, 'check');\n } else if (args.includes('-a') || args.includes('--analyze')) {\n const index = args.findIndex((arg) => arg === '-a' || arg === '--analyze');\n args.splice(index, 1, 'analyze');\n } else if (args.includes('-s') || args.includes('--workspace-info')) {\n const index = args.findIndex((arg) => arg === '-s' || arg === '--workspace-info');\n args.splice(index, 1, 'workspace');\n } else if (args.includes('-t') || args.includes('--theme')) {\n const index = args.findIndex((arg) => arg === '-t' || arg === '--theme');\n args.splice(index, 1, 'theme');\n } else if (args.includes('--security-audit')) {\n const index = args.findIndex((arg) => arg === '--security-audit');\n args.splice(index, 1, 'security');\n } else if (args.includes('--security-fix')) {\n const index = args.findIndex((arg) => arg === '--security-fix');\n args.splice(index, 1, 'security', '--fix-vulns');\n }\n\n // Show help if no arguments provided\n if (args.length <= 2) {\n program.help();\n }\n\n // Handle custom --version with update checking\n if (args.includes('--version')) {\n console.log(packageJson.version);\n\n // Check for updates if not in CI and enabled in config\n if (VersionChecker.shouldCheckForUpdates() && config.advanced?.checkForUpdates !== false) {\n try {\n console.log(chalk.gray('Checking for updates...'));\n const versionResult = await VersionChecker.checkVersion(packageJson.version, {\n skipPrompt: false,\n timeout: 5000, // Longer timeout for explicit version check\n });\n\n if (versionResult.shouldPrompt) {\n const didUpdate = await VersionChecker.promptAndUpdate(versionResult);\n if (didUpdate) {\n console.log(chalk.blue('Please run your command again to use the updated version.'));\n process.exit(0);\n }\n } else if (versionResult.isLatest) {\n console.log(chalk.green('You are using the latest version!'));\n }\n } catch (error) {\n // Silently fail update check for version command\n if (args.includes('-v') || args.includes('--verbose')) {\n console.warn(chalk.yellow('⚠️ Could not check for updates:'), error);\n }\n }\n }\n\n process.exit(0);\n }\n\n // Parse command line arguments\n try {\n await program.parseAsync(args);\n } catch (error) {\n console.error(chalk.red('❌ Unexpected error:'), error);\n if (error instanceof Error && error.stack) {\n console.error(chalk.gray(error.stack));\n }\n process.exit(1);\n }\n}\n\n// Run the CLI if this file is executed directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n main().catch((error) => {\n console.error(chalk.red('❌ Fatal error:'), error);\n process.exit(1);\n });\n}\n"]}
|