pnpm-catalog-updates 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +335 -0
- package/bin/pcu.js +15 -0
- package/dist/application/services/CatalogUpdateService.d.ts +190 -0
- package/dist/application/services/CatalogUpdateService.d.ts.map +1 -0
- package/dist/application/services/CatalogUpdateService.js +521 -0
- package/dist/application/services/CatalogUpdateService.js.map +1 -0
- package/dist/application/services/WorkspaceService.d.ts +139 -0
- package/dist/application/services/WorkspaceService.d.ts.map +1 -0
- package/dist/application/services/WorkspaceService.js +340 -0
- package/dist/application/services/WorkspaceService.js.map +1 -0
- package/dist/cli/commands/CheckCommand.d.ts +41 -0
- package/dist/cli/commands/CheckCommand.d.ts.map +1 -0
- package/dist/cli/commands/CheckCommand.js +168 -0
- package/dist/cli/commands/CheckCommand.js.map +1 -0
- package/dist/cli/commands/UpdateCommand.d.ts +69 -0
- package/dist/cli/commands/UpdateCommand.d.ts.map +1 -0
- package/dist/cli/commands/UpdateCommand.js +361 -0
- package/dist/cli/commands/UpdateCommand.js.map +1 -0
- package/dist/cli/formatters/OutputFormatter.d.ts +95 -0
- package/dist/cli/formatters/OutputFormatter.d.ts.map +1 -0
- package/dist/cli/formatters/OutputFormatter.js +437 -0
- package/dist/cli/formatters/OutputFormatter.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +244 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/options/GlobalOptions.d.ts +117 -0
- package/dist/cli/options/GlobalOptions.d.ts.map +1 -0
- package/dist/cli/options/GlobalOptions.js +278 -0
- package/dist/cli/options/GlobalOptions.js.map +1 -0
- package/dist/cli/options/index.d.ts +5 -0
- package/dist/cli/options/index.d.ts.map +1 -0
- package/dist/cli/options/index.js +5 -0
- package/dist/cli/options/index.js.map +1 -0
- package/dist/cli/validators/CommandValidator.d.ts +60 -0
- package/dist/cli/validators/CommandValidator.d.ts.map +1 -0
- package/dist/cli/validators/CommandValidator.js +319 -0
- package/dist/cli/validators/CommandValidator.js.map +1 -0
- package/dist/cli/validators/index.d.ts +5 -0
- package/dist/cli/validators/index.d.ts.map +1 -0
- package/dist/cli/validators/index.js +5 -0
- package/dist/cli/validators/index.js.map +1 -0
- package/dist/common/config/Config.d.ts +142 -0
- package/dist/common/config/Config.d.ts.map +1 -0
- package/dist/common/config/Config.js +355 -0
- package/dist/common/config/Config.js.map +1 -0
- package/dist/common/config/index.d.ts +6 -0
- package/dist/common/config/index.d.ts.map +1 -0
- package/dist/common/config/index.js +6 -0
- package/dist/common/config/index.js.map +1 -0
- package/dist/common/logger/Logger.d.ts +110 -0
- package/dist/common/logger/Logger.d.ts.map +1 -0
- package/dist/common/logger/Logger.js +289 -0
- package/dist/common/logger/Logger.js.map +1 -0
- package/dist/common/logger/index.d.ts +6 -0
- package/dist/common/logger/index.d.ts.map +1 -0
- package/dist/common/logger/index.js +6 -0
- package/dist/common/logger/index.js.map +1 -0
- package/dist/common/types/cli.d.ts +265 -0
- package/dist/common/types/cli.d.ts.map +1 -0
- package/dist/common/types/cli.js +5 -0
- package/dist/common/types/cli.js.map +1 -0
- package/dist/common/types/core.d.ts +270 -0
- package/dist/common/types/core.d.ts.map +1 -0
- package/dist/common/types/core.js +32 -0
- package/dist/common/types/core.js.map +1 -0
- package/dist/common/types/index.d.ts +8 -0
- package/dist/common/types/index.d.ts.map +1 -0
- package/dist/common/types/index.js +8 -0
- package/dist/common/types/index.js.map +1 -0
- package/dist/common/utils/async.d.ts +74 -0
- package/dist/common/utils/async.d.ts.map +1 -0
- package/dist/common/utils/async.js +228 -0
- package/dist/common/utils/async.js.map +1 -0
- package/dist/common/utils/format.d.ts +32 -0
- package/dist/common/utils/format.d.ts.map +1 -0
- package/dist/common/utils/format.js +121 -0
- package/dist/common/utils/format.js.map +1 -0
- package/dist/common/utils/git.d.ts +44 -0
- package/dist/common/utils/git.d.ts.map +1 -0
- package/dist/common/utils/git.js +147 -0
- package/dist/common/utils/git.js.map +1 -0
- package/dist/common/utils/index.d.ts +11 -0
- package/dist/common/utils/index.d.ts.map +1 -0
- package/dist/common/utils/index.js +11 -0
- package/dist/common/utils/index.js.map +1 -0
- package/dist/common/utils/string.d.ts +56 -0
- package/dist/common/utils/string.d.ts.map +1 -0
- package/dist/common/utils/string.js +134 -0
- package/dist/common/utils/string.js.map +1 -0
- package/dist/common/utils/validation.d.ts +88 -0
- package/dist/common/utils/validation.d.ts.map +1 -0
- package/dist/common/utils/validation.js +281 -0
- package/dist/common/utils/validation.js.map +1 -0
- package/dist/domain/entities/Catalog.d.ts +117 -0
- package/dist/domain/entities/Catalog.d.ts.map +1 -0
- package/dist/domain/entities/Catalog.js +240 -0
- package/dist/domain/entities/Catalog.js.map +1 -0
- package/dist/domain/entities/Package.d.ts +142 -0
- package/dist/domain/entities/Package.d.ts.map +1 -0
- package/dist/domain/entities/Package.js +275 -0
- package/dist/domain/entities/Package.js.map +1 -0
- package/dist/domain/entities/Workspace.d.ts +95 -0
- package/dist/domain/entities/Workspace.d.ts.map +1 -0
- package/dist/domain/entities/Workspace.js +170 -0
- package/dist/domain/entities/Workspace.js.map +1 -0
- package/dist/domain/repositories/WorkspaceRepository.d.ts +41 -0
- package/dist/domain/repositories/WorkspaceRepository.d.ts.map +1 -0
- package/dist/domain/repositories/WorkspaceRepository.js +8 -0
- package/dist/domain/repositories/WorkspaceRepository.js.map +1 -0
- package/dist/domain/value-objects/CatalogCollection.d.ts +106 -0
- package/dist/domain/value-objects/CatalogCollection.d.ts.map +1 -0
- package/dist/domain/value-objects/CatalogCollection.js +230 -0
- package/dist/domain/value-objects/CatalogCollection.js.map +1 -0
- package/dist/domain/value-objects/PackageCollection.d.ts +122 -0
- package/dist/domain/value-objects/PackageCollection.d.ts.map +1 -0
- package/dist/domain/value-objects/PackageCollection.js +263 -0
- package/dist/domain/value-objects/PackageCollection.js.map +1 -0
- package/dist/domain/value-objects/Version.d.ts +141 -0
- package/dist/domain/value-objects/Version.d.ts.map +1 -0
- package/dist/domain/value-objects/Version.js +268 -0
- package/dist/domain/value-objects/Version.js.map +1 -0
- package/dist/domain/value-objects/WorkspaceConfig.d.ts +135 -0
- package/dist/domain/value-objects/WorkspaceConfig.d.ts.map +1 -0
- package/dist/domain/value-objects/WorkspaceConfig.js +307 -0
- package/dist/domain/value-objects/WorkspaceConfig.js.map +1 -0
- package/dist/domain/value-objects/WorkspaceId.d.ts +51 -0
- package/dist/domain/value-objects/WorkspaceId.d.ts.map +1 -0
- package/dist/domain/value-objects/WorkspaceId.js +104 -0
- package/dist/domain/value-objects/WorkspaceId.js.map +1 -0
- package/dist/domain/value-objects/WorkspacePath.d.ts +75 -0
- package/dist/domain/value-objects/WorkspacePath.d.ts.map +1 -0
- package/dist/domain/value-objects/WorkspacePath.js +128 -0
- package/dist/domain/value-objects/WorkspacePath.js.map +1 -0
- package/dist/infrastructure/cache/Cache.d.ts +161 -0
- package/dist/infrastructure/cache/Cache.d.ts.map +1 -0
- package/dist/infrastructure/cache/Cache.js +398 -0
- package/dist/infrastructure/cache/Cache.js.map +1 -0
- package/dist/infrastructure/cache/index.d.ts +6 -0
- package/dist/infrastructure/cache/index.d.ts.map +1 -0
- package/dist/infrastructure/cache/index.js +6 -0
- package/dist/infrastructure/cache/index.js.map +1 -0
- package/dist/infrastructure/external-services/NpmRegistryService.d.ts +106 -0
- package/dist/infrastructure/external-services/NpmRegistryService.d.ts.map +1 -0
- package/dist/infrastructure/external-services/NpmRegistryService.js +303 -0
- package/dist/infrastructure/external-services/NpmRegistryService.js.map +1 -0
- package/dist/infrastructure/file-system/FileSystemService.d.ts +100 -0
- package/dist/infrastructure/file-system/FileSystemService.d.ts.map +1 -0
- package/dist/infrastructure/file-system/FileSystemService.js +284 -0
- package/dist/infrastructure/file-system/FileSystemService.js.map +1 -0
- package/dist/infrastructure/repositories/FileWorkspaceRepository.d.ts +57 -0
- package/dist/infrastructure/repositories/FileWorkspaceRepository.d.ts.map +1 -0
- package/dist/infrastructure/repositories/FileWorkspaceRepository.js +179 -0
- package/dist/infrastructure/repositories/FileWorkspaceRepository.js.map +1 -0
- package/package.json +125 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 pnpm-catalog-updater
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
# pnpm-catalog-updater
|
|
2
|
+
|
|
3
|
+
A powerful CLI tool to check and update pnpm workspace catalog dependencies, inspired by [npm-check-updates](https://github.com/raineorshine/npm-check-updates).
|
|
4
|
+
|
|
5
|
+
[](https://github.com/houko/pnpm-catalog-updater/actions)
|
|
6
|
+
[](https://badge.fury.io/js/pnpm-catalog-updater)
|
|
7
|
+
[](https://coveralls.io/github/houko/pnpm-catalog-updater?branch=main)
|
|
8
|
+
|
|
9
|
+
## ✨ Features
|
|
10
|
+
|
|
11
|
+
- 🔍 **Smart Detection**: Automatically discovers pnpm workspaces and catalog configurations
|
|
12
|
+
- 🎯 **Catalog Focused**: Specialized for pnpm catalog dependency management
|
|
13
|
+
- 🚀 **Interactive Mode**: Choose which dependencies to update with an intuitive interface
|
|
14
|
+
- 📊 **Impact Analysis**: Understand which packages will be affected by catalog changes
|
|
15
|
+
- 🔒 **Safe Updates**: Dry-run mode and backup options for safe dependency updates
|
|
16
|
+
- ⚡ **High Performance**: Parallel API queries and intelligent caching
|
|
17
|
+
- 🛡️ **Security Aware**: Built-in security vulnerability scanning
|
|
18
|
+
- 🔧 **Configurable**: Flexible configuration options and update strategies
|
|
19
|
+
|
|
20
|
+
## 🚀 Quick Start
|
|
21
|
+
|
|
22
|
+
### Installation
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Global installation
|
|
26
|
+
npm install -g pnpm-catalog-updater
|
|
27
|
+
|
|
28
|
+
# Or use with npx
|
|
29
|
+
npx pnpm-catalog-updater
|
|
30
|
+
|
|
31
|
+
# Or use the short alias
|
|
32
|
+
pcu
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Basic Usage
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Check for outdated catalog dependencies
|
|
39
|
+
pcu check
|
|
40
|
+
|
|
41
|
+
# Update catalog dependencies interactively
|
|
42
|
+
pcu update --interactive
|
|
43
|
+
|
|
44
|
+
# Update to latest versions (dry run)
|
|
45
|
+
pcu update --dry-run
|
|
46
|
+
|
|
47
|
+
# Update specific catalog
|
|
48
|
+
pcu update --catalog react17
|
|
49
|
+
|
|
50
|
+
# Update with specific target
|
|
51
|
+
pcu update --target minor
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 📖 Usage
|
|
55
|
+
|
|
56
|
+
### Commands
|
|
57
|
+
|
|
58
|
+
#### `pcu check`
|
|
59
|
+
|
|
60
|
+
Check for outdated dependencies in your pnpm workspace catalogs.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pcu check [options]
|
|
64
|
+
|
|
65
|
+
Options:
|
|
66
|
+
--workspace <path> Workspace directory (default: current directory)
|
|
67
|
+
--catalog <name> Check specific catalog only
|
|
68
|
+
--format <type> Output format: table, json, yaml (default: table)
|
|
69
|
+
--verbose Show detailed information
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
#### `pcu update`
|
|
73
|
+
|
|
74
|
+
Update catalog dependencies to newer versions.
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
pcu update [options]
|
|
78
|
+
|
|
79
|
+
Options:
|
|
80
|
+
--interactive, -i Interactive mode to choose updates
|
|
81
|
+
--dry-run, -d Preview changes without writing files
|
|
82
|
+
--target <type> Update target: latest, greatest, minor, patch (default: latest)
|
|
83
|
+
--catalog <name> Update specific catalog only
|
|
84
|
+
--include <pattern> Include packages matching pattern
|
|
85
|
+
--exclude <pattern> Exclude packages matching pattern
|
|
86
|
+
--force Force updates even if risky
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### `pcu analyze`
|
|
90
|
+
|
|
91
|
+
Analyze the impact of updating a specific dependency.
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
pcu analyze <catalog> <package>
|
|
95
|
+
|
|
96
|
+
Example:
|
|
97
|
+
pcu analyze default react
|
|
98
|
+
pcu analyze react17 @types/react
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Configuration
|
|
102
|
+
|
|
103
|
+
Create a `.pcurc.json` file in your project root:
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"defaults": {
|
|
108
|
+
"target": "latest",
|
|
109
|
+
"timeout": 30000,
|
|
110
|
+
"parallel": 5
|
|
111
|
+
},
|
|
112
|
+
"workspace": {
|
|
113
|
+
"autoDiscover": true,
|
|
114
|
+
"catalogMode": "strict"
|
|
115
|
+
},
|
|
116
|
+
"update": {
|
|
117
|
+
"interactive": true,
|
|
118
|
+
"dryRunFirst": true,
|
|
119
|
+
"skipPrereleases": false
|
|
120
|
+
},
|
|
121
|
+
"output": {
|
|
122
|
+
"format": "table",
|
|
123
|
+
"color": true,
|
|
124
|
+
"verbose": false
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## 📁 Project Structure
|
|
130
|
+
|
|
131
|
+
This project follows Domain-Driven Design (DDD) principles:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
src/
|
|
135
|
+
├── cli/ # CLI interface layer
|
|
136
|
+
│ ├── commands/ # Command handlers
|
|
137
|
+
│ ├── options/ # Option parsers
|
|
138
|
+
│ ├── formatters/ # Output formatters
|
|
139
|
+
│ └── validators/ # Input validation
|
|
140
|
+
├── application/ # Application services
|
|
141
|
+
│ ├── services/ # Application services
|
|
142
|
+
│ ├── handlers/ # Command handlers
|
|
143
|
+
│ └── mappers/ # Data mappers
|
|
144
|
+
├── domain/ # Domain model
|
|
145
|
+
│ ├── entities/ # Domain entities
|
|
146
|
+
│ ├── value-objects/ # Value objects
|
|
147
|
+
│ ├── aggregates/ # Aggregate roots
|
|
148
|
+
│ ├── services/ # Domain services
|
|
149
|
+
│ └── repositories/ # Repository interfaces
|
|
150
|
+
├── infrastructure/ # Infrastructure layer
|
|
151
|
+
│ ├── repositories/ # Repository implementations
|
|
152
|
+
│ ├── external-services/ # External service clients
|
|
153
|
+
│ └── file-system/ # File system operations
|
|
154
|
+
├── adapters/ # Adapter layer
|
|
155
|
+
│ ├── registry/ # Package registry adapters
|
|
156
|
+
│ └── package-managers/ # Package manager adapters
|
|
157
|
+
└── common/ # Common utilities
|
|
158
|
+
├── types/ # Type definitions
|
|
159
|
+
├── utils/ # Utility functions
|
|
160
|
+
├── config/ # Configuration
|
|
161
|
+
└── logger/ # Logging
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## 🧪 Development
|
|
165
|
+
|
|
166
|
+
### Prerequisites
|
|
167
|
+
|
|
168
|
+
- Node.js >= 18.0.0
|
|
169
|
+
- pnpm >= 8.15.0
|
|
170
|
+
|
|
171
|
+
### Setup
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
# Clone the repository
|
|
175
|
+
git clone https://github.com/houko/pnpm-catalog-updater.git
|
|
176
|
+
cd pnpm-catalog-updater
|
|
177
|
+
|
|
178
|
+
# Install dependencies
|
|
179
|
+
pnpm install
|
|
180
|
+
|
|
181
|
+
# Build the project
|
|
182
|
+
pnpm build
|
|
183
|
+
|
|
184
|
+
# Run tests
|
|
185
|
+
pnpm test
|
|
186
|
+
|
|
187
|
+
# Run in development mode
|
|
188
|
+
pnpm dev --help
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Scripts
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
# Development
|
|
195
|
+
pnpm dev # Run in development mode
|
|
196
|
+
pnpm build # Build the project
|
|
197
|
+
pnpm build:watch # Build in watch mode
|
|
198
|
+
|
|
199
|
+
# Testing
|
|
200
|
+
pnpm test # Run unit tests
|
|
201
|
+
pnpm test:watch # Run tests in watch mode
|
|
202
|
+
pnpm test:coverage # Run tests with coverage
|
|
203
|
+
pnpm test:e2e # Run E2E tests
|
|
204
|
+
|
|
205
|
+
# Code Quality
|
|
206
|
+
pnpm lint # Lint code
|
|
207
|
+
pnpm lint:fix # Fix linting issues
|
|
208
|
+
pnpm format # Format code
|
|
209
|
+
pnpm typecheck # Type checking
|
|
210
|
+
|
|
211
|
+
# Utilities
|
|
212
|
+
pnpm clean # Clean build artifacts
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Testing
|
|
216
|
+
|
|
217
|
+
The project uses a comprehensive testing strategy:
|
|
218
|
+
|
|
219
|
+
- **Unit Tests**: Test individual components in isolation
|
|
220
|
+
- **Integration Tests**: Test component interactions
|
|
221
|
+
- **E2E Tests**: Test the complete CLI workflow
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Run all tests
|
|
225
|
+
pnpm test
|
|
226
|
+
|
|
227
|
+
# Run tests with coverage
|
|
228
|
+
pnpm test:coverage
|
|
229
|
+
|
|
230
|
+
# Run E2E tests
|
|
231
|
+
pnpm test:e2e
|
|
232
|
+
|
|
233
|
+
# Run tests in watch mode
|
|
234
|
+
pnpm test:watch
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## 📊 Examples
|
|
238
|
+
|
|
239
|
+
### Basic Workspace
|
|
240
|
+
|
|
241
|
+
```yaml
|
|
242
|
+
# pnpm-workspace.yaml
|
|
243
|
+
packages:
|
|
244
|
+
- "packages/*"
|
|
245
|
+
|
|
246
|
+
catalog:
|
|
247
|
+
react: ^18.2.0
|
|
248
|
+
lodash: ^4.17.21
|
|
249
|
+
typescript: ^5.0.0
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Multi-Catalog Setup
|
|
253
|
+
|
|
254
|
+
```yaml
|
|
255
|
+
# pnpm-workspace.yaml
|
|
256
|
+
packages:
|
|
257
|
+
- "apps/*"
|
|
258
|
+
- "packages/*"
|
|
259
|
+
|
|
260
|
+
catalog:
|
|
261
|
+
# Default catalog
|
|
262
|
+
react: ^18.2.0
|
|
263
|
+
typescript: ^5.0.0
|
|
264
|
+
|
|
265
|
+
catalogs:
|
|
266
|
+
# Legacy versions
|
|
267
|
+
react17:
|
|
268
|
+
react: ^17.0.2
|
|
269
|
+
@types/react: ^17.0.62
|
|
270
|
+
|
|
271
|
+
# Latest versions
|
|
272
|
+
latest:
|
|
273
|
+
react: ^18.2.0
|
|
274
|
+
typescript: ^5.2.0
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Usage in package.json
|
|
278
|
+
|
|
279
|
+
```json
|
|
280
|
+
{
|
|
281
|
+
"dependencies": {
|
|
282
|
+
"react": "catalog:",
|
|
283
|
+
"lodash": "catalog:",
|
|
284
|
+
"legacy-lib": "catalog:react17"
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## 🤝 Contributing
|
|
290
|
+
|
|
291
|
+
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
292
|
+
|
|
293
|
+
### Development Workflow
|
|
294
|
+
|
|
295
|
+
1. Fork the repository
|
|
296
|
+
2. Create a feature branch: `git checkout -b feature/amazing-feature`
|
|
297
|
+
3. Make your changes
|
|
298
|
+
4. Add tests for your changes
|
|
299
|
+
5. Ensure all tests pass: `pnpm test`
|
|
300
|
+
6. Lint your code: `pnpm lint:fix`
|
|
301
|
+
7. Commit your changes: `git commit -m 'feat: add amazing feature'`
|
|
302
|
+
8. Push to the branch: `git push origin feature/amazing-feature`
|
|
303
|
+
9. Open a Pull Request
|
|
304
|
+
|
|
305
|
+
### Commit Message Convention
|
|
306
|
+
|
|
307
|
+
We use [Conventional Commits](https://conventionalcommits.org/):
|
|
308
|
+
|
|
309
|
+
- `feat`: A new feature
|
|
310
|
+
- `fix`: A bug fix
|
|
311
|
+
- `docs`: Documentation only changes
|
|
312
|
+
- `style`: Changes that do not affect the meaning of the code
|
|
313
|
+
- `refactor`: A code change that neither fixes a bug nor adds a feature
|
|
314
|
+
- `test`: Adding missing tests or correcting existing tests
|
|
315
|
+
- `chore`: Changes to the build process or auxiliary tools
|
|
316
|
+
|
|
317
|
+
## 📄 License
|
|
318
|
+
|
|
319
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
320
|
+
|
|
321
|
+
## 🙏 Acknowledgments
|
|
322
|
+
|
|
323
|
+
- Inspired by [npm-check-updates](https://github.com/raineorshine/npm-check-updates)
|
|
324
|
+
- Built with love for the pnpm community
|
|
325
|
+
- Thanks to all contributors and users
|
|
326
|
+
|
|
327
|
+
## 📞 Support
|
|
328
|
+
|
|
329
|
+
- 📖 [Documentation](https://github.com/houko/pnpm-catalog-updater#readme)
|
|
330
|
+
- 🐛 [Issue Tracker](https://github.com/houko/pnpm-catalog-updater/issues)
|
|
331
|
+
- 💬 [Discussions](https://github.com/houko/pnpm-catalog-updater/discussions)
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
Made with ❤️ for the pnpm community
|
package/bin/pcu.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = path.dirname(__filename);
|
|
8
|
+
|
|
9
|
+
// Import and run the CLI
|
|
10
|
+
const { main } = await import(path.join(__dirname, '..', 'dist', 'cli', 'index.js'));
|
|
11
|
+
|
|
12
|
+
main().catch((error) => {
|
|
13
|
+
console.error('❌ Error:', error.message);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
});
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Catalog Update Service
|
|
3
|
+
*
|
|
4
|
+
* Core application service that handles catalog dependency updates.
|
|
5
|
+
* Orchestrates domain objects and infrastructure services to provide
|
|
6
|
+
* high-level use cases for checking and updating catalog dependencies.
|
|
7
|
+
*/
|
|
8
|
+
import { WorkspaceRepository } from '../../domain/repositories/WorkspaceRepository.js';
|
|
9
|
+
import { NpmRegistryService } from '../../infrastructure/external-services/NpmRegistryService.js';
|
|
10
|
+
export interface CheckOptions {
|
|
11
|
+
workspacePath?: string | undefined;
|
|
12
|
+
catalogName?: string | undefined;
|
|
13
|
+
target?: UpdateTarget | undefined;
|
|
14
|
+
includePrerelease?: boolean | undefined;
|
|
15
|
+
exclude?: string[] | undefined;
|
|
16
|
+
include?: string[] | undefined;
|
|
17
|
+
}
|
|
18
|
+
export interface UpdateOptions extends CheckOptions {
|
|
19
|
+
interactive?: boolean;
|
|
20
|
+
dryRun?: boolean;
|
|
21
|
+
force?: boolean;
|
|
22
|
+
createBackup?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface OutdatedReport {
|
|
25
|
+
workspace: {
|
|
26
|
+
path: string;
|
|
27
|
+
name: string;
|
|
28
|
+
};
|
|
29
|
+
catalogs: CatalogUpdateInfo[];
|
|
30
|
+
totalOutdated: number;
|
|
31
|
+
hasUpdates: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface CatalogUpdateInfo {
|
|
34
|
+
catalogName: string;
|
|
35
|
+
outdatedDependencies: OutdatedDependencyInfo[];
|
|
36
|
+
totalPackages: number;
|
|
37
|
+
outdatedCount: number;
|
|
38
|
+
}
|
|
39
|
+
export interface OutdatedDependencyInfo {
|
|
40
|
+
packageName: string;
|
|
41
|
+
currentVersion: string;
|
|
42
|
+
latestVersion: string;
|
|
43
|
+
wantedVersion: string;
|
|
44
|
+
updateType: 'major' | 'minor' | 'patch';
|
|
45
|
+
isSecurityUpdate: boolean;
|
|
46
|
+
affectedPackages: string[];
|
|
47
|
+
}
|
|
48
|
+
export interface UpdatePlan {
|
|
49
|
+
workspace: {
|
|
50
|
+
path: string;
|
|
51
|
+
name: string;
|
|
52
|
+
};
|
|
53
|
+
updates: PlannedUpdate[];
|
|
54
|
+
conflicts: VersionConflict[];
|
|
55
|
+
totalUpdates: number;
|
|
56
|
+
hasConflicts: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface PlannedUpdate {
|
|
59
|
+
catalogName: string;
|
|
60
|
+
packageName: string;
|
|
61
|
+
currentVersion: string;
|
|
62
|
+
newVersion: string;
|
|
63
|
+
updateType: 'major' | 'minor' | 'patch';
|
|
64
|
+
reason: string;
|
|
65
|
+
affectedPackages: string[];
|
|
66
|
+
}
|
|
67
|
+
export interface VersionConflict {
|
|
68
|
+
packageName: string;
|
|
69
|
+
catalogs: Array<{
|
|
70
|
+
catalogName: string;
|
|
71
|
+
currentVersion: string;
|
|
72
|
+
proposedVersion: string;
|
|
73
|
+
}>;
|
|
74
|
+
recommendation: string;
|
|
75
|
+
}
|
|
76
|
+
export interface UpdateResult {
|
|
77
|
+
success: boolean;
|
|
78
|
+
workspace: {
|
|
79
|
+
path: string;
|
|
80
|
+
name: string;
|
|
81
|
+
};
|
|
82
|
+
updatedDependencies: UpdatedDependency[];
|
|
83
|
+
skippedDependencies: SkippedDependency[];
|
|
84
|
+
errors: UpdateError[];
|
|
85
|
+
totalUpdated: number;
|
|
86
|
+
totalSkipped: number;
|
|
87
|
+
totalErrors: number;
|
|
88
|
+
}
|
|
89
|
+
export interface UpdatedDependency {
|
|
90
|
+
catalogName: string;
|
|
91
|
+
packageName: string;
|
|
92
|
+
fromVersion: string;
|
|
93
|
+
toVersion: string;
|
|
94
|
+
updateType: 'major' | 'minor' | 'patch';
|
|
95
|
+
}
|
|
96
|
+
export interface SkippedDependency {
|
|
97
|
+
catalogName: string;
|
|
98
|
+
packageName: string;
|
|
99
|
+
currentVersion: string;
|
|
100
|
+
reason: string;
|
|
101
|
+
}
|
|
102
|
+
export interface UpdateError {
|
|
103
|
+
catalogName: string;
|
|
104
|
+
packageName: string;
|
|
105
|
+
error: string;
|
|
106
|
+
fatal: boolean;
|
|
107
|
+
}
|
|
108
|
+
export interface ImpactAnalysis {
|
|
109
|
+
packageName: string;
|
|
110
|
+
catalogName: string;
|
|
111
|
+
currentVersion: string;
|
|
112
|
+
proposedVersion: string;
|
|
113
|
+
updateType: 'major' | 'minor' | 'patch';
|
|
114
|
+
affectedPackages: PackageImpact[];
|
|
115
|
+
riskLevel: 'low' | 'medium' | 'high';
|
|
116
|
+
securityImpact: SecurityImpact;
|
|
117
|
+
recommendations: string[];
|
|
118
|
+
}
|
|
119
|
+
export interface PackageImpact {
|
|
120
|
+
packageName: string;
|
|
121
|
+
packagePath: string;
|
|
122
|
+
dependencyType: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies';
|
|
123
|
+
isBreakingChange: boolean;
|
|
124
|
+
compatibilityRisk: 'low' | 'medium' | 'high';
|
|
125
|
+
}
|
|
126
|
+
export interface SecurityImpact {
|
|
127
|
+
hasVulnerabilities: boolean;
|
|
128
|
+
fixedVulnerabilities: number;
|
|
129
|
+
newVulnerabilities: number;
|
|
130
|
+
severityChange: 'better' | 'worse' | 'same';
|
|
131
|
+
}
|
|
132
|
+
export type UpdateTarget = 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';
|
|
133
|
+
export declare class CatalogUpdateService {
|
|
134
|
+
private readonly workspaceRepository;
|
|
135
|
+
private readonly registryService;
|
|
136
|
+
constructor(workspaceRepository: WorkspaceRepository, registryService: NpmRegistryService);
|
|
137
|
+
/**
|
|
138
|
+
* Check for outdated catalog dependencies
|
|
139
|
+
*/
|
|
140
|
+
checkOutdatedDependencies(options?: CheckOptions): Promise<OutdatedReport>;
|
|
141
|
+
/**
|
|
142
|
+
* Plan catalog dependency updates
|
|
143
|
+
*/
|
|
144
|
+
planUpdates(options: UpdateOptions): Promise<UpdatePlan>;
|
|
145
|
+
/**
|
|
146
|
+
* Execute catalog dependency updates
|
|
147
|
+
*/
|
|
148
|
+
executeUpdates(plan: UpdatePlan, options: UpdateOptions): Promise<UpdateResult>;
|
|
149
|
+
/**
|
|
150
|
+
* Analyze the impact of updating a specific dependency
|
|
151
|
+
*/
|
|
152
|
+
analyzeImpact(catalogName: string, packageName: string, newVersion: string, workspacePath?: string): Promise<ImpactAnalysis>;
|
|
153
|
+
/**
|
|
154
|
+
* Check if a specific package should be updated based on filters
|
|
155
|
+
*/
|
|
156
|
+
private shouldCheckPackage;
|
|
157
|
+
/**
|
|
158
|
+
* Check if package matches a pattern (simple glob-like matching)
|
|
159
|
+
*/
|
|
160
|
+
private matchesPattern;
|
|
161
|
+
/**
|
|
162
|
+
* Check if a package needs updating
|
|
163
|
+
*/
|
|
164
|
+
private checkPackageUpdate;
|
|
165
|
+
/**
|
|
166
|
+
* Get version constrained by update type
|
|
167
|
+
*/
|
|
168
|
+
private getConstrainedVersion;
|
|
169
|
+
/**
|
|
170
|
+
* Generate update reason description
|
|
171
|
+
*/
|
|
172
|
+
private getUpdateReason;
|
|
173
|
+
/**
|
|
174
|
+
* Analyze security impact of version change
|
|
175
|
+
*/
|
|
176
|
+
private analyzeSecurityImpact;
|
|
177
|
+
/**
|
|
178
|
+
* Assess compatibility risk for update type
|
|
179
|
+
*/
|
|
180
|
+
private assessCompatibilityRisk;
|
|
181
|
+
/**
|
|
182
|
+
* Assess overall risk level
|
|
183
|
+
*/
|
|
184
|
+
private assessOverallRisk;
|
|
185
|
+
/**
|
|
186
|
+
* Generate recommendations based on analysis
|
|
187
|
+
*/
|
|
188
|
+
private generateRecommendations;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=CatalogUpdateService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CatalogUpdateService.d.ts","sourceRoot":"","sources":["../../../src/application/services/CatalogUpdateService.ts"],"names":[],"mappings":"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"}
|