pcu 0.5.7 → 0.6.4

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.
Files changed (223) hide show
  1. package/bin/pcu.js +1 -1
  2. package/dist/index.js +9559 -32
  3. package/dist/index.js.map +1 -1
  4. package/package.json +36 -84
  5. package/src/cli/commands/checkCommand.ts +227 -0
  6. package/src/cli/commands/initCommand.ts +394 -0
  7. package/src/cli/commands/securityCommand.ts +569 -0
  8. package/src/cli/commands/updateCommand.ts +245 -0
  9. package/src/cli/formatters/outputFormatter.ts +830 -0
  10. package/src/cli/formatters/progressBar.ts +700 -0
  11. package/src/cli/index.ts +565 -0
  12. package/src/cli/interactive/interactivePrompts.ts +517 -0
  13. package/src/cli/options/globalOptions.ts +380 -0
  14. package/src/cli/options/index.ts +5 -0
  15. package/src/cli/themes/colorTheme.ts +379 -0
  16. package/src/cli/validators/commandValidator.ts +395 -0
  17. package/src/cli/validators/index.ts +5 -0
  18. package/src/index.ts +4 -0
  19. package/README.ja.md +0 -587
  20. package/README.md +0 -694
  21. package/README.zh-CN.md +0 -634
  22. package/dist/application/services/CatalogUpdateService.d.ts +0 -209
  23. package/dist/application/services/CatalogUpdateService.d.ts.map +0 -1
  24. package/dist/application/services/CatalogUpdateService.js +0 -839
  25. package/dist/application/services/CatalogUpdateService.js.map +0 -1
  26. package/dist/application/services/WorkspaceService.d.ts +0 -139
  27. package/dist/application/services/WorkspaceService.d.ts.map +0 -1
  28. package/dist/application/services/WorkspaceService.js +0 -340
  29. package/dist/application/services/WorkspaceService.js.map +0 -1
  30. package/dist/cli/commands/CheckCommand.d.ts +0 -40
  31. package/dist/cli/commands/CheckCommand.d.ts.map +0 -1
  32. package/dist/cli/commands/CheckCommand.js +0 -177
  33. package/dist/cli/commands/CheckCommand.js.map +0 -1
  34. package/dist/cli/commands/InitCommand.d.ts +0 -53
  35. package/dist/cli/commands/InitCommand.d.ts.map +0 -1
  36. package/dist/cli/commands/InitCommand.js +0 -338
  37. package/dist/cli/commands/InitCommand.js.map +0 -1
  38. package/dist/cli/commands/SecurityCommand.d.ts +0 -113
  39. package/dist/cli/commands/SecurityCommand.d.ts.map +0 -1
  40. package/dist/cli/commands/SecurityCommand.js +0 -410
  41. package/dist/cli/commands/SecurityCommand.js.map +0 -1
  42. package/dist/cli/commands/UpdateCommand.d.ts +0 -44
  43. package/dist/cli/commands/UpdateCommand.d.ts.map +0 -1
  44. package/dist/cli/commands/UpdateCommand.js +0 -189
  45. package/dist/cli/commands/UpdateCommand.js.map +0 -1
  46. package/dist/cli/formatters/OutputFormatter.d.ts +0 -116
  47. package/dist/cli/formatters/OutputFormatter.d.ts.map +0 -1
  48. package/dist/cli/formatters/OutputFormatter.js +0 -664
  49. package/dist/cli/formatters/OutputFormatter.js.map +0 -1
  50. package/dist/cli/formatters/ProgressBar.d.ts +0 -195
  51. package/dist/cli/formatters/ProgressBar.d.ts.map +0 -1
  52. package/dist/cli/formatters/ProgressBar.js +0 -622
  53. package/dist/cli/formatters/ProgressBar.js.map +0 -1
  54. package/dist/cli/index.d.ts +0 -12
  55. package/dist/cli/index.d.ts.map +0 -1
  56. package/dist/cli/index.js +0 -492
  57. package/dist/cli/index.js.map +0 -1
  58. package/dist/cli/interactive/InteractivePrompts.d.ts +0 -85
  59. package/dist/cli/interactive/InteractivePrompts.d.ts.map +0 -1
  60. package/dist/cli/interactive/InteractivePrompts.js +0 -434
  61. package/dist/cli/interactive/InteractivePrompts.js.map +0 -1
  62. package/dist/cli/options/GlobalOptions.d.ts +0 -117
  63. package/dist/cli/options/GlobalOptions.d.ts.map +0 -1
  64. package/dist/cli/options/GlobalOptions.js +0 -278
  65. package/dist/cli/options/GlobalOptions.js.map +0 -1
  66. package/dist/cli/options/index.d.ts +0 -5
  67. package/dist/cli/options/index.d.ts.map +0 -1
  68. package/dist/cli/options/index.js +0 -5
  69. package/dist/cli/options/index.js.map +0 -1
  70. package/dist/cli/themes/ColorTheme.d.ts +0 -211
  71. package/dist/cli/themes/ColorTheme.d.ts.map +0 -1
  72. package/dist/cli/themes/ColorTheme.js +0 -267
  73. package/dist/cli/themes/ColorTheme.js.map +0 -1
  74. package/dist/cli/validators/CommandValidator.d.ts +0 -60
  75. package/dist/cli/validators/CommandValidator.d.ts.map +0 -1
  76. package/dist/cli/validators/CommandValidator.js +0 -319
  77. package/dist/cli/validators/CommandValidator.js.map +0 -1
  78. package/dist/cli/validators/index.d.ts +0 -5
  79. package/dist/cli/validators/index.d.ts.map +0 -1
  80. package/dist/cli/validators/index.js +0 -5
  81. package/dist/cli/validators/index.js.map +0 -1
  82. package/dist/common/config/Config.d.ts +0 -142
  83. package/dist/common/config/Config.d.ts.map +0 -1
  84. package/dist/common/config/Config.js +0 -382
  85. package/dist/common/config/Config.js.map +0 -1
  86. package/dist/common/config/ConfigLoader.d.ts +0 -49
  87. package/dist/common/config/ConfigLoader.d.ts.map +0 -1
  88. package/dist/common/config/ConfigLoader.js +0 -180
  89. package/dist/common/config/ConfigLoader.js.map +0 -1
  90. package/dist/common/config/PackageFilterConfig.d.ts +0 -56
  91. package/dist/common/config/PackageFilterConfig.d.ts.map +0 -1
  92. package/dist/common/config/PackageFilterConfig.js +0 -94
  93. package/dist/common/config/PackageFilterConfig.js.map +0 -1
  94. package/dist/common/config/index.d.ts +0 -8
  95. package/dist/common/config/index.d.ts.map +0 -1
  96. package/dist/common/config/index.js +0 -8
  97. package/dist/common/config/index.js.map +0 -1
  98. package/dist/common/error-handling/ErrorTracker.d.ts +0 -48
  99. package/dist/common/error-handling/ErrorTracker.d.ts.map +0 -1
  100. package/dist/common/error-handling/ErrorTracker.js +0 -93
  101. package/dist/common/error-handling/ErrorTracker.js.map +0 -1
  102. package/dist/common/error-handling/UserFriendlyErrorHandler.d.ts +0 -74
  103. package/dist/common/error-handling/UserFriendlyErrorHandler.d.ts.map +0 -1
  104. package/dist/common/error-handling/UserFriendlyErrorHandler.js +0 -703
  105. package/dist/common/error-handling/UserFriendlyErrorHandler.js.map +0 -1
  106. package/dist/common/error-handling/index.d.ts +0 -11
  107. package/dist/common/error-handling/index.d.ts.map +0 -1
  108. package/dist/common/error-handling/index.js +0 -9
  109. package/dist/common/error-handling/index.js.map +0 -1
  110. package/dist/common/logger/Logger.d.ts +0 -110
  111. package/dist/common/logger/Logger.d.ts.map +0 -1
  112. package/dist/common/logger/Logger.js +0 -289
  113. package/dist/common/logger/Logger.js.map +0 -1
  114. package/dist/common/logger/index.d.ts +0 -6
  115. package/dist/common/logger/index.d.ts.map +0 -1
  116. package/dist/common/logger/index.js +0 -6
  117. package/dist/common/logger/index.js.map +0 -1
  118. package/dist/common/types/cli.d.ts +0 -265
  119. package/dist/common/types/cli.d.ts.map +0 -1
  120. package/dist/common/types/cli.js +0 -5
  121. package/dist/common/types/cli.js.map +0 -1
  122. package/dist/common/types/core.d.ts +0 -270
  123. package/dist/common/types/core.d.ts.map +0 -1
  124. package/dist/common/types/core.js +0 -32
  125. package/dist/common/types/core.js.map +0 -1
  126. package/dist/common/types/index.d.ts +0 -8
  127. package/dist/common/types/index.d.ts.map +0 -1
  128. package/dist/common/types/index.js +0 -8
  129. package/dist/common/types/index.js.map +0 -1
  130. package/dist/common/utils/VersionChecker.d.ts +0 -54
  131. package/dist/common/utils/VersionChecker.d.ts.map +0 -1
  132. package/dist/common/utils/VersionChecker.js +0 -180
  133. package/dist/common/utils/VersionChecker.js.map +0 -1
  134. package/dist/common/utils/async.d.ts +0 -74
  135. package/dist/common/utils/async.d.ts.map +0 -1
  136. package/dist/common/utils/async.js +0 -228
  137. package/dist/common/utils/async.js.map +0 -1
  138. package/dist/common/utils/format.d.ts +0 -32
  139. package/dist/common/utils/format.d.ts.map +0 -1
  140. package/dist/common/utils/format.js +0 -121
  141. package/dist/common/utils/format.js.map +0 -1
  142. package/dist/common/utils/git.d.ts +0 -44
  143. package/dist/common/utils/git.d.ts.map +0 -1
  144. package/dist/common/utils/git.js +0 -147
  145. package/dist/common/utils/git.js.map +0 -1
  146. package/dist/common/utils/index.d.ts +0 -12
  147. package/dist/common/utils/index.d.ts.map +0 -1
  148. package/dist/common/utils/index.js +0 -12
  149. package/dist/common/utils/index.js.map +0 -1
  150. package/dist/common/utils/string.d.ts +0 -56
  151. package/dist/common/utils/string.d.ts.map +0 -1
  152. package/dist/common/utils/string.js +0 -134
  153. package/dist/common/utils/string.js.map +0 -1
  154. package/dist/common/utils/validation.d.ts +0 -88
  155. package/dist/common/utils/validation.d.ts.map +0 -1
  156. package/dist/common/utils/validation.js +0 -308
  157. package/dist/common/utils/validation.js.map +0 -1
  158. package/dist/domain/entities/Catalog.d.ts +0 -117
  159. package/dist/domain/entities/Catalog.d.ts.map +0 -1
  160. package/dist/domain/entities/Catalog.js +0 -240
  161. package/dist/domain/entities/Catalog.js.map +0 -1
  162. package/dist/domain/entities/Package.d.ts +0 -143
  163. package/dist/domain/entities/Package.d.ts.map +0 -1
  164. package/dist/domain/entities/Package.js +0 -272
  165. package/dist/domain/entities/Package.js.map +0 -1
  166. package/dist/domain/entities/Workspace.d.ts +0 -95
  167. package/dist/domain/entities/Workspace.d.ts.map +0 -1
  168. package/dist/domain/entities/Workspace.js +0 -173
  169. package/dist/domain/entities/Workspace.js.map +0 -1
  170. package/dist/domain/repositories/WorkspaceRepository.d.ts +0 -41
  171. package/dist/domain/repositories/WorkspaceRepository.d.ts.map +0 -1
  172. package/dist/domain/repositories/WorkspaceRepository.js +0 -8
  173. package/dist/domain/repositories/WorkspaceRepository.js.map +0 -1
  174. package/dist/domain/value-objects/CatalogCollection.d.ts +0 -106
  175. package/dist/domain/value-objects/CatalogCollection.d.ts.map +0 -1
  176. package/dist/domain/value-objects/CatalogCollection.js +0 -230
  177. package/dist/domain/value-objects/CatalogCollection.js.map +0 -1
  178. package/dist/domain/value-objects/PackageCollection.d.ts +0 -122
  179. package/dist/domain/value-objects/PackageCollection.d.ts.map +0 -1
  180. package/dist/domain/value-objects/PackageCollection.js +0 -263
  181. package/dist/domain/value-objects/PackageCollection.js.map +0 -1
  182. package/dist/domain/value-objects/Version.d.ts +0 -141
  183. package/dist/domain/value-objects/Version.d.ts.map +0 -1
  184. package/dist/domain/value-objects/Version.js +0 -268
  185. package/dist/domain/value-objects/Version.js.map +0 -1
  186. package/dist/domain/value-objects/WorkspaceConfig.d.ts +0 -144
  187. package/dist/domain/value-objects/WorkspaceConfig.d.ts.map +0 -1
  188. package/dist/domain/value-objects/WorkspaceConfig.js +0 -357
  189. package/dist/domain/value-objects/WorkspaceConfig.js.map +0 -1
  190. package/dist/domain/value-objects/WorkspaceId.d.ts +0 -51
  191. package/dist/domain/value-objects/WorkspaceId.d.ts.map +0 -1
  192. package/dist/domain/value-objects/WorkspaceId.js +0 -104
  193. package/dist/domain/value-objects/WorkspaceId.js.map +0 -1
  194. package/dist/domain/value-objects/WorkspacePath.d.ts +0 -75
  195. package/dist/domain/value-objects/WorkspacePath.d.ts.map +0 -1
  196. package/dist/domain/value-objects/WorkspacePath.js +0 -128
  197. package/dist/domain/value-objects/WorkspacePath.js.map +0 -1
  198. package/dist/index.d.ts +0 -25
  199. package/dist/index.d.ts.map +0 -1
  200. package/dist/infrastructure/cache/Cache.d.ts +0 -161
  201. package/dist/infrastructure/cache/Cache.d.ts.map +0 -1
  202. package/dist/infrastructure/cache/Cache.js +0 -398
  203. package/dist/infrastructure/cache/Cache.js.map +0 -1
  204. package/dist/infrastructure/cache/index.d.ts +0 -6
  205. package/dist/infrastructure/cache/index.d.ts.map +0 -1
  206. package/dist/infrastructure/cache/index.js +0 -6
  207. package/dist/infrastructure/cache/index.js.map +0 -1
  208. package/dist/infrastructure/external-services/NpmRegistryService.d.ts +0 -153
  209. package/dist/infrastructure/external-services/NpmRegistryService.d.ts.map +0 -1
  210. package/dist/infrastructure/external-services/NpmRegistryService.js +0 -511
  211. package/dist/infrastructure/external-services/NpmRegistryService.js.map +0 -1
  212. package/dist/infrastructure/file-system/FileSystemService.d.ts +0 -120
  213. package/dist/infrastructure/file-system/FileSystemService.d.ts.map +0 -1
  214. package/dist/infrastructure/file-system/FileSystemService.js +0 -663
  215. package/dist/infrastructure/file-system/FileSystemService.js.map +0 -1
  216. package/dist/infrastructure/repositories/FileWorkspaceRepository.d.ts +0 -57
  217. package/dist/infrastructure/repositories/FileWorkspaceRepository.d.ts.map +0 -1
  218. package/dist/infrastructure/repositories/FileWorkspaceRepository.js +0 -179
  219. package/dist/infrastructure/repositories/FileWorkspaceRepository.js.map +0 -1
  220. package/dist/infrastructure/utils/NpmrcParser.d.ts +0 -40
  221. package/dist/infrastructure/utils/NpmrcParser.d.ts.map +0 -1
  222. package/dist/infrastructure/utils/NpmrcParser.js +0 -157
  223. package/dist/infrastructure/utils/NpmrcParser.js.map +0 -1
package/package.json CHANGED
@@ -1,36 +1,7 @@
1
1
  {
2
2
  "name": "pcu",
3
- "version": "0.5.7",
4
- "publishConfig": {
5
- "access": "public"
6
- },
7
- "description": "A CLI tool to check and update pnpm workspace catalog dependencies",
8
- "keywords": [
9
- "pnpm",
10
- "catalog",
11
- "dependencies",
12
- "update",
13
- "workspace",
14
- "cli",
15
- "package-manager"
16
- ],
17
- "author": {
18
- "name": "Evan Hu",
19
- "email": "evan@yldm.tech"
20
- },
21
- "license": "MIT",
22
- "repository": {
23
- "type": "git",
24
- "url": "https://github.com/houko/pnpm-catalog-updates.git"
25
- },
26
- "bugs": {
27
- "url": "https://github.com/houko/pnpm-catalog-updates/issues"
28
- },
29
- "homepage": "https://github.com/houko/pnpm-catalog-updates#readme",
30
- "engines": {
31
- "node": ">=22.0.0"
32
- },
33
- "packageManager": "pnpm@10.12.4+sha512.5ea8b0deed94ed68691c9bad4c955492705c5eeb8a87ef86bc62c74a26b037b08ff9570f108b2e4dbd1dd1a9186fea925e527f141c648e85af45631074680184",
3
+ "version": "0.6.4",
4
+ "description": "CLI application for pnpm-catalog-updates",
34
5
  "type": "module",
35
6
  "main": "./dist/index.js",
36
7
  "module": "./dist/index.js",
@@ -42,31 +13,8 @@
42
13
  "files": [
43
14
  "dist",
44
15
  "bin",
45
- "README.md",
46
- "LICENSE"
16
+ "src"
47
17
  ],
48
- "scripts": {
49
- "build": "tsc && pnpm run build:bin",
50
- "build:bin": "node scripts/build-bin.js",
51
- "build:watch": "tsc --watch",
52
- "dev": "tsx src/cli/index.ts",
53
- "start": "node dist/cli/index.js",
54
- "test": "vitest",
55
- "test:watch": "vitest --watch",
56
- "test:coverage": "vitest --coverage",
57
- "test:e2e": "vitest --config vitest.e2e.config.ts",
58
- "lint": "eslint src test --ext .ts,.js",
59
- "lint:fix": "eslint src test --ext .ts,.js --fix",
60
- "format": "prettier --write src test",
61
- "format:check": "prettier --check src test",
62
- "typecheck": "tsc --noEmit",
63
- "clean": "rimraf dist bin/*.js",
64
- "prepare": "husky install",
65
- "prepack": "npm run build",
66
- "changeset": "changeset",
67
- "version": "changeset version",
68
- "release": "npm run build && changeset publish"
69
- },
70
18
  "dependencies": {
71
19
  "chalk": "5.4.1",
72
20
  "cli-table3": "0.6.5",
@@ -80,48 +28,52 @@
80
28
  "pacote": "21.0.0",
81
29
  "rxjs": "7.8.2",
82
30
  "semver": "7.7.2",
83
- "yaml": "2.8.0",
84
- "zod": "3.25.75"
31
+ "yaml": "2.8.0"
85
32
  },
86
33
  "devDependencies": {
87
- "@changesets/cli": "^2.29.5",
88
- "@eslint/js": "^9.30.1",
89
- "@types/fs-extra": "^11.0.4",
90
34
  "@types/inquirer": "^9.0.8",
91
- "@types/lodash": "^4.17.20",
92
- "@types/node": "^24.0.10",
93
- "@types/semver": "^7.7.0",
94
- "@typescript-eslint/eslint-plugin": "^8.36.0",
95
- "@typescript-eslint/parser": "^8.36.0",
35
+ "@types/node": "20.17.14",
96
36
  "@vitest/coverage-v8": "^3.2.4",
97
37
  "@vitest/ui": "^3.2.4",
98
38
  "eslint": "9.30.1",
99
- "eslint-config-prettier": "^10.1.5",
100
- "eslint-plugin-import": "^2.32.0",
101
- "eslint-plugin-node": "^11.1.0",
102
- "eslint-plugin-prettier": "^5.5.1",
103
- "husky": "^9.1.7",
104
- "lint-staged": "^16.1.2",
39
+ "fs-extra": "11.3.0",
105
40
  "msw": "^2.10.3",
106
41
  "prettier": "3.6.2",
107
42
  "rimraf": "^6.0.1",
43
+ "tsup": "^8.3.5",
108
44
  "tsx": "^4.20.3",
109
45
  "typescript": "5.8.3",
110
46
  "vitest": "^3.2.4"
111
47
  },
112
- "lint-staged": {
113
- "*.{ts,js}": [
114
- "eslint --fix",
115
- "prettier --write"
116
- ],
117
- "*.{json,md,yml,yaml}": [
118
- "prettier --write"
119
- ]
48
+ "keywords": [
49
+ "pnpm",
50
+ "catalog",
51
+ "cli"
52
+ ],
53
+ "author": {
54
+ "name": "Evan Hu",
55
+ "email": "evan@yldm.tech"
120
56
  },
121
- "volta": {
122
- "node": ">=22",
123
- "pnpm": ">=10"
57
+ "license": "MIT",
58
+ "repository": {
59
+ "type": "git",
60
+ "url": "https://github.com/houko/pnpm-catalog-updates.git",
61
+ "directory": "apps/cli"
124
62
  },
125
- "peerDependencies": {},
126
- "optionalDependencies": {}
63
+ "scripts": {
64
+ "build": "tsup && pnpm run build:bin",
65
+ "build:bin": "node ../../scripts/build-bin.js",
66
+ "build:watch": "tsup --watch",
67
+ "dev": "tsx src/index.ts",
68
+ "start": "node dist/index.js",
69
+ "test": "vitest --run --passWithNoTests",
70
+ "test:watch": "vitest --watch",
71
+ "test:coverage": "vitest --run --coverage --passWithNoTests",
72
+ "lint": "eslint src --ext .ts",
73
+ "lint:fix": "eslint src --ext .ts --fix",
74
+ "format": "prettier --write src",
75
+ "format:check": "prettier --check src",
76
+ "typecheck": "tsc --noEmit",
77
+ "clean": "rimraf dist bin/*.js"
78
+ }
127
79
  }
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Check Command
3
+ *
4
+ * CLI command to check for outdated catalog dependencies.
5
+ * Provides detailed information about available updates.
6
+ */
7
+
8
+ import { CatalogUpdateService, CheckOptions } from '@pcu/core';
9
+ import { OutputFormatter, OutputFormat } from '../formatters/outputFormatter.js';
10
+ import { StyledText, ThemeManager } from '../themes/colorTheme.js';
11
+ import { ConfigLoader } from '@pcu/utils';
12
+
13
+ export interface CheckCommandOptions {
14
+ workspace?: string;
15
+ catalog?: string;
16
+ format?: OutputFormat;
17
+ target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';
18
+ prerelease?: boolean;
19
+ include?: string[];
20
+ exclude?: string[];
21
+ verbose?: boolean;
22
+ color?: boolean;
23
+ }
24
+
25
+ export class CheckCommand {
26
+ constructor(private readonly catalogUpdateService: CatalogUpdateService) {}
27
+
28
+ /**
29
+ * Execute the check command
30
+ */
31
+ async execute(options: CheckCommandOptions = {}): Promise<void> {
32
+ try {
33
+ // Initialize theme
34
+ ThemeManager.setTheme('default');
35
+
36
+ if (options.verbose) {
37
+ console.log(StyledText.iconAnalysis('Checking for outdated catalog dependencies'));
38
+ console.log(StyledText.muted(`Workspace: ${options.workspace || process.cwd()}`));
39
+
40
+ if (options.catalog) {
41
+ console.log(StyledText.muted(`Catalog: ${options.catalog}`));
42
+ }
43
+
44
+ if (options.target && options.target !== 'latest') {
45
+ console.log(StyledText.muted(`Target: ${options.target}`));
46
+ }
47
+
48
+ console.log('');
49
+ }
50
+
51
+ // Load configuration file first
52
+ const config = ConfigLoader.loadConfig(options.workspace || process.cwd());
53
+
54
+ // Use format from CLI options first, then config file, then default
55
+ const effectiveFormat = options.format || config.defaults?.format || 'table';
56
+
57
+ // Create output formatter with effective format
58
+ const formatter = new OutputFormatter(
59
+ effectiveFormat as OutputFormat,
60
+ options.color !== false
61
+ );
62
+
63
+ // Merge CLI options with configuration file settings
64
+ const checkOptions: CheckOptions = {
65
+ workspacePath: options.workspace,
66
+ catalogName: options.catalog,
67
+ target: options.target || config.defaults?.target || 'latest',
68
+ includePrerelease: options.prerelease ?? config.defaults?.includePrerelease ?? false,
69
+ // CLI include/exclude options take priority over config file
70
+ include: options.include?.length ? options.include : config.include,
71
+ exclude: options.exclude?.length ? options.exclude : config.exclude,
72
+ };
73
+
74
+ // Execute check
75
+ const report = await this.catalogUpdateService.checkOutdatedDependencies(checkOptions);
76
+
77
+ // Format and display results
78
+ const formattedOutput = formatter.formatOutdatedReport(report);
79
+ console.log(formattedOutput);
80
+
81
+ // Show summary
82
+ if (options.verbose || options.format === 'table') {
83
+ this.showSummary(report, options);
84
+ }
85
+
86
+ // Always exit with 0 since this is just a check command
87
+ // and finding updates is not an error condition
88
+ process.exit(0);
89
+ } catch (error) {
90
+ console.error(StyledText.iconError('Error checking dependencies:'));
91
+ console.error(StyledText.error(String(error)));
92
+
93
+ if (options.verbose && error instanceof Error) {
94
+ console.error(StyledText.muted('Stack trace:'));
95
+ console.error(StyledText.muted(error.stack || 'No stack trace available'));
96
+ }
97
+
98
+ process.exit(1);
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Show command summary
104
+ */
105
+ private showSummary(report: any, _options: CheckCommandOptions): void {
106
+ const lines: string[] = [];
107
+ const theme = ThemeManager.getTheme();
108
+
109
+ if (!report.hasUpdates) {
110
+ lines.push(StyledText.iconSuccess('All catalog dependencies are up to date!'));
111
+ } else {
112
+ lines.push(StyledText.iconInfo('Summary:'));
113
+ lines.push(` • ${report.totalOutdated} outdated dependencies found`);
114
+ lines.push(` • ${report.catalogs.length} catalogs checked`);
115
+
116
+ const totalPackages = report.catalogs.reduce(
117
+ (sum: number, cat: any) => sum + cat.totalPackages,
118
+ 0
119
+ );
120
+ lines.push(` • ${totalPackages} total catalog entries`);
121
+
122
+ // Show breakdown by update type
123
+ const updateTypes = { major: 0, minor: 0, patch: 0 };
124
+
125
+ for (const catalog of report.catalogs) {
126
+ for (const dep of catalog.outdatedDependencies) {
127
+ updateTypes[dep.updateType as keyof typeof updateTypes]++;
128
+ }
129
+ }
130
+
131
+ if (updateTypes.major > 0) {
132
+ lines.push(theme.major(` • ${updateTypes.major} major updates`));
133
+ }
134
+ if (updateTypes.minor > 0) {
135
+ lines.push(theme.minor(` • ${updateTypes.minor} minor updates`));
136
+ }
137
+ if (updateTypes.patch > 0) {
138
+ lines.push(theme.patch(` • ${updateTypes.patch} patch updates`));
139
+ }
140
+
141
+ // Security updates
142
+ const securityUpdates = report.catalogs.reduce((sum: number, cat: any) => {
143
+ return sum + cat.outdatedDependencies.filter((dep: any) => dep.isSecurityUpdate).length;
144
+ }, 0);
145
+
146
+ if (securityUpdates > 0) {
147
+ lines.push(StyledText.iconSecurity(`${securityUpdates} security updates`));
148
+ }
149
+
150
+ lines.push('');
151
+ lines.push(StyledText.iconUpdate('Run with --update to apply updates'));
152
+
153
+ if (updateTypes.major > 0) {
154
+ lines.push(StyledText.iconWarning('Major updates may contain breaking changes'));
155
+ }
156
+ }
157
+
158
+ console.log(lines.join('\n'));
159
+ }
160
+
161
+ /**
162
+ * Validate command options
163
+ */
164
+ static validateOptions(options: CheckCommandOptions): string[] {
165
+ const errors: string[] = [];
166
+
167
+ // Validate format
168
+ if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {
169
+ errors.push('Invalid format. Must be one of: table, json, yaml, minimal');
170
+ }
171
+
172
+ // Validate target
173
+ if (
174
+ options.target &&
175
+ !['latest', 'greatest', 'minor', 'patch', 'newest'].includes(options.target)
176
+ ) {
177
+ errors.push('Invalid target. Must be one of: latest, greatest, minor, patch, newest');
178
+ }
179
+
180
+ // Validate include/exclude patterns
181
+ if (options.include && options.include.some((pattern) => !pattern.trim())) {
182
+ errors.push('Include patterns cannot be empty');
183
+ }
184
+
185
+ if (options.exclude && options.exclude.some((pattern) => !pattern.trim())) {
186
+ errors.push('Exclude patterns cannot be empty');
187
+ }
188
+
189
+ return errors;
190
+ }
191
+
192
+ /**
193
+ * Get command help text
194
+ */
195
+ static getHelpText(): string {
196
+ return `
197
+ Check for outdated catalog dependencies
198
+
199
+ Usage:
200
+ pcu check [options]
201
+
202
+ Options:
203
+ --workspace <path> Workspace directory (default: current directory)
204
+ --catalog <name> Check specific catalog only
205
+ --format <type> Output format: table, json, yaml, minimal (default: table)
206
+ --target <type> Update target: latest, greatest, minor, patch, newest (default: latest)
207
+ --prerelease Include prerelease versions
208
+ --include <pattern> Include packages matching pattern (can be used multiple times)
209
+ --exclude <pattern> Exclude packages matching pattern (can be used multiple times)
210
+ --verbose Show detailed information
211
+ --no-color Disable colored output
212
+
213
+ Examples:
214
+ pcu check # Check all catalogs
215
+ pcu check --catalog react17 # Check specific catalog
216
+ pcu check --target minor # Check for minor updates only
217
+ pcu check --format json # Output as JSON
218
+ pcu check --include "react*" # Include only React packages
219
+ pcu check --exclude "@types/*" # Exclude TypeScript types
220
+
221
+ Exit Codes:
222
+ 0 All dependencies are up to date
223
+ 1 Updates are available
224
+ 2 Error occurred
225
+ `;
226
+ }
227
+ }