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
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File System Service
|
|
3
|
+
*
|
|
4
|
+
* Provides abstracted file system operations for the application.
|
|
5
|
+
* Handles reading/writing workspace files, package.json, and pnpm-workspace.yaml.
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'fs/promises';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { glob } from 'glob';
|
|
10
|
+
import YAML from 'yaml';
|
|
11
|
+
export class FileSystemService {
|
|
12
|
+
/**
|
|
13
|
+
* Check if a file exists
|
|
14
|
+
*/
|
|
15
|
+
async exists(filePath) {
|
|
16
|
+
try {
|
|
17
|
+
await fs.access(filePath);
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if a path is a directory
|
|
26
|
+
*/
|
|
27
|
+
async isDirectory(dirPath) {
|
|
28
|
+
try {
|
|
29
|
+
const stat = await fs.stat(dirPath);
|
|
30
|
+
return stat.isDirectory();
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Read a text file
|
|
38
|
+
*/
|
|
39
|
+
async readTextFile(filePath) {
|
|
40
|
+
try {
|
|
41
|
+
return await fs.readFile(filePath, 'utf-8');
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
throw new Error(`Failed to read file ${filePath}: ${error}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Write a text file
|
|
49
|
+
*/
|
|
50
|
+
async writeTextFile(filePath, content) {
|
|
51
|
+
try {
|
|
52
|
+
// Ensure directory exists
|
|
53
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
54
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
throw new Error(`Failed to write file ${filePath}: ${error}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Read and parse a JSON file
|
|
62
|
+
*/
|
|
63
|
+
async readJsonFile(filePath) {
|
|
64
|
+
try {
|
|
65
|
+
const content = await this.readTextFile(filePath);
|
|
66
|
+
return JSON.parse(content);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw new Error(`Failed to read JSON file ${filePath}: ${error}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Write a JSON file
|
|
74
|
+
*/
|
|
75
|
+
async writeJsonFile(filePath, data, indent = 2) {
|
|
76
|
+
try {
|
|
77
|
+
const content = JSON.stringify(data, null, indent);
|
|
78
|
+
await this.writeTextFile(filePath, content);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
throw new Error(`Failed to write JSON file ${filePath}: ${error}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Read and parse a YAML file
|
|
86
|
+
*/
|
|
87
|
+
async readYamlFile(filePath) {
|
|
88
|
+
try {
|
|
89
|
+
const content = await this.readTextFile(filePath);
|
|
90
|
+
return YAML.parse(content);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
throw new Error(`Failed to read YAML file ${filePath}: ${error}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Write a YAML file
|
|
98
|
+
*/
|
|
99
|
+
async writeYamlFile(filePath, data) {
|
|
100
|
+
try {
|
|
101
|
+
const content = YAML.stringify(data, {
|
|
102
|
+
indent: 2,
|
|
103
|
+
});
|
|
104
|
+
await this.writeTextFile(filePath, content);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
throw new Error(`Failed to write YAML file ${filePath}: ${error}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Read pnpm-workspace.yaml configuration
|
|
112
|
+
*/
|
|
113
|
+
async readPnpmWorkspaceConfig(workspacePath) {
|
|
114
|
+
const configPath = workspacePath.getPnpmWorkspaceConfigPath().toString();
|
|
115
|
+
if (!(await this.exists(configPath))) {
|
|
116
|
+
throw new Error(`pnpm-workspace.yaml not found at ${configPath}`);
|
|
117
|
+
}
|
|
118
|
+
return await this.readYamlFile(configPath);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Write pnpm-workspace.yaml configuration
|
|
122
|
+
*/
|
|
123
|
+
async writePnpmWorkspaceConfig(workspacePath, config) {
|
|
124
|
+
const configPath = workspacePath.getPnpmWorkspaceConfigPath().toString();
|
|
125
|
+
await this.writeYamlFile(configPath, config);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Read package.json file
|
|
129
|
+
*/
|
|
130
|
+
async readPackageJson(packagePath) {
|
|
131
|
+
const packageJsonPath = packagePath.getPackageJsonPath().toString();
|
|
132
|
+
if (!(await this.exists(packageJsonPath))) {
|
|
133
|
+
throw new Error(`package.json not found at ${packageJsonPath}`);
|
|
134
|
+
}
|
|
135
|
+
return await this.readJsonFile(packageJsonPath);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Write package.json file
|
|
139
|
+
*/
|
|
140
|
+
async writePackageJson(packagePath, packageData) {
|
|
141
|
+
const packageJsonPath = packagePath.getPackageJsonPath().toString();
|
|
142
|
+
await this.writeJsonFile(packageJsonPath, packageData);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Find package.json files using glob patterns
|
|
146
|
+
*/
|
|
147
|
+
async findPackageJsonFiles(workspacePath, patterns) {
|
|
148
|
+
const results = [];
|
|
149
|
+
for (const pattern of patterns) {
|
|
150
|
+
try {
|
|
151
|
+
// Convert pattern to absolute path and look for package.json
|
|
152
|
+
const absolutePattern = path.resolve(workspacePath.toString(), pattern, 'package.json');
|
|
153
|
+
const matches = await glob(absolutePattern, {
|
|
154
|
+
ignore: ['**/node_modules/**'],
|
|
155
|
+
absolute: true,
|
|
156
|
+
});
|
|
157
|
+
results.push(...matches);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
// Continue with other patterns if one fails
|
|
161
|
+
console.warn(`Failed to process pattern ${pattern}:`, error);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Remove duplicates and return
|
|
165
|
+
return Array.from(new Set(results));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Find directories matching patterns
|
|
169
|
+
*/
|
|
170
|
+
async findDirectories(workspacePath, patterns) {
|
|
171
|
+
const results = [];
|
|
172
|
+
for (const pattern of patterns) {
|
|
173
|
+
try {
|
|
174
|
+
const absolutePattern = path.resolve(workspacePath.toString(), pattern);
|
|
175
|
+
const matches = await glob(absolutePattern, {
|
|
176
|
+
ignore: ['**/node_modules/**'],
|
|
177
|
+
absolute: true,
|
|
178
|
+
});
|
|
179
|
+
results.push(...matches);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.warn(`Failed to process pattern ${pattern}:`, error);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return Array.from(new Set(results));
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Check if a directory contains a pnpm workspace
|
|
189
|
+
*/
|
|
190
|
+
async isPnpmWorkspace(dirPath) {
|
|
191
|
+
const workspaceConfigPath = path.join(dirPath, 'pnpm-workspace.yaml');
|
|
192
|
+
const packageJsonPath = path.join(dirPath, 'package.json');
|
|
193
|
+
// Must have both pnpm-workspace.yaml and package.json
|
|
194
|
+
return (await this.exists(workspaceConfigPath)) && (await this.exists(packageJsonPath));
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Find the nearest pnpm workspace by traversing up the directory tree
|
|
198
|
+
*/
|
|
199
|
+
async findNearestWorkspace(startPath) {
|
|
200
|
+
let currentPath = path.resolve(startPath);
|
|
201
|
+
while (currentPath !== path.dirname(currentPath)) {
|
|
202
|
+
if (await this.isPnpmWorkspace(currentPath)) {
|
|
203
|
+
return currentPath;
|
|
204
|
+
}
|
|
205
|
+
currentPath = path.dirname(currentPath);
|
|
206
|
+
}
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get file modification time
|
|
211
|
+
*/
|
|
212
|
+
async getModificationTime(filePath) {
|
|
213
|
+
try {
|
|
214
|
+
const stat = await fs.stat(filePath);
|
|
215
|
+
return stat.mtime;
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
throw new Error(`Failed to get modification time for ${filePath}: ${error}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Create a backup of a file
|
|
223
|
+
*/
|
|
224
|
+
async createBackup(filePath) {
|
|
225
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
226
|
+
const backupPath = `${filePath}.backup.${timestamp}`;
|
|
227
|
+
try {
|
|
228
|
+
await fs.copyFile(filePath, backupPath);
|
|
229
|
+
return backupPath;
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
throw new Error(`Failed to create backup of ${filePath}: ${error}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Restore a file from backup
|
|
237
|
+
*/
|
|
238
|
+
async restoreFromBackup(originalPath, backupPath) {
|
|
239
|
+
try {
|
|
240
|
+
await fs.copyFile(backupPath, originalPath);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
throw new Error(`Failed to restore ${originalPath} from backup: ${error}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Remove a file
|
|
248
|
+
*/
|
|
249
|
+
async removeFile(filePath) {
|
|
250
|
+
try {
|
|
251
|
+
await fs.unlink(filePath);
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
throw new Error(`Failed to remove file ${filePath}: ${error}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* List files in a directory
|
|
259
|
+
*/
|
|
260
|
+
async listFiles(dirPath) {
|
|
261
|
+
try {
|
|
262
|
+
const items = await fs.readdir(dirPath, { withFileTypes: true });
|
|
263
|
+
return items.filter((item) => item.isFile()).map((item) => path.join(dirPath, item.name));
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
throw new Error(`Failed to list files in ${dirPath}: ${error}`);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* List directories in a directory
|
|
271
|
+
*/
|
|
272
|
+
async listDirectories(dirPath) {
|
|
273
|
+
try {
|
|
274
|
+
const items = await fs.readdir(dirPath, { withFileTypes: true });
|
|
275
|
+
return items
|
|
276
|
+
.filter((item) => item.isDirectory())
|
|
277
|
+
.map((item) => path.join(dirPath, item.name));
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
throw new Error(`Failed to list directories in ${dirPath}: ${error}`);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=FileSystemService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSystemService.js","sourceRoot":"","sources":["../../../src/infrastructure/file-system/FileSystemService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-based Workspace Repository Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements WorkspaceRepository interface using the file system.
|
|
5
|
+
* Handles loading and saving workspace data from pnpm-workspace.yaml and package.json files.
|
|
6
|
+
*/
|
|
7
|
+
import { WorkspaceRepository } from '../../domain/repositories/WorkspaceRepository.js';
|
|
8
|
+
import { Workspace } from '../../domain/entities/Workspace.js';
|
|
9
|
+
import { WorkspaceId } from '../../domain/value-objects/WorkspaceId.js';
|
|
10
|
+
import { WorkspacePath } from '../../domain/value-objects/WorkspacePath.js';
|
|
11
|
+
import { WorkspaceConfig } from '../../domain/value-objects/WorkspaceConfig.js';
|
|
12
|
+
import { FileSystemService } from '../file-system/FileSystemService.js';
|
|
13
|
+
export declare class FileWorkspaceRepository implements WorkspaceRepository {
|
|
14
|
+
private readonly fileSystemService;
|
|
15
|
+
constructor(fileSystemService: FileSystemService);
|
|
16
|
+
/**
|
|
17
|
+
* Find a workspace by its path
|
|
18
|
+
*/
|
|
19
|
+
findByPath(path: WorkspacePath): Promise<Workspace | null>;
|
|
20
|
+
/**
|
|
21
|
+
* Find a workspace by its ID
|
|
22
|
+
*/
|
|
23
|
+
findById(_id: WorkspaceId): Promise<Workspace | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Save a workspace
|
|
26
|
+
*/
|
|
27
|
+
save(workspace: Workspace): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Load workspace configuration from path
|
|
30
|
+
*/
|
|
31
|
+
loadConfiguration(path: WorkspacePath): Promise<WorkspaceConfig>;
|
|
32
|
+
/**
|
|
33
|
+
* Save workspace configuration to path
|
|
34
|
+
*/
|
|
35
|
+
saveConfiguration(path: WorkspacePath, config: WorkspaceConfig): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Check if a path contains a valid pnpm workspace
|
|
38
|
+
*/
|
|
39
|
+
isValidWorkspace(path: WorkspacePath): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Discover workspace from current working directory or given path
|
|
42
|
+
*/
|
|
43
|
+
discoverWorkspace(searchPath?: WorkspacePath): Promise<Workspace | null>;
|
|
44
|
+
/**
|
|
45
|
+
* Load packages from workspace
|
|
46
|
+
*/
|
|
47
|
+
private loadPackages;
|
|
48
|
+
/**
|
|
49
|
+
* Load catalogs from workspace configuration
|
|
50
|
+
*/
|
|
51
|
+
private loadCatalogs;
|
|
52
|
+
/**
|
|
53
|
+
* Save packages (update their package.json files)
|
|
54
|
+
*/
|
|
55
|
+
private savePackages;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=FileWorkspaceRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileWorkspaceRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/FileWorkspaceRepository.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAGhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,qBAAa,uBAAwB,YAAW,mBAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,iBAAiB;IAEjE;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA0BhE;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAM3D;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/C;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAStE;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IASpF;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7D;;OAEG;IACG,iBAAiB,CAAC,UAAU,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAiB9E;;OAEG;YACW,YAAY;IAwC1B;;OAEG;YACW,YAAY;IAsB1B;;OAEG;YACW,YAAY;CAW3B"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File-based Workspace Repository Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements WorkspaceRepository interface using the file system.
|
|
5
|
+
* Handles loading and saving workspace data from pnpm-workspace.yaml and package.json files.
|
|
6
|
+
*/
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import { Workspace } from '../../domain/entities/Workspace.js';
|
|
9
|
+
import { Package } from '../../domain/entities/Package.js';
|
|
10
|
+
import { Catalog } from '../../domain/entities/Catalog.js';
|
|
11
|
+
import { WorkspaceId } from '../../domain/value-objects/WorkspaceId.js';
|
|
12
|
+
import { WorkspacePath } from '../../domain/value-objects/WorkspacePath.js';
|
|
13
|
+
import { WorkspaceConfig } from '../../domain/value-objects/WorkspaceConfig.js';
|
|
14
|
+
import { CatalogCollection } from '../../domain/value-objects/CatalogCollection.js';
|
|
15
|
+
import { PackageCollection } from '../../domain/value-objects/PackageCollection.js';
|
|
16
|
+
export class FileWorkspaceRepository {
|
|
17
|
+
fileSystemService;
|
|
18
|
+
constructor(fileSystemService) {
|
|
19
|
+
this.fileSystemService = fileSystemService;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Find a workspace by its path
|
|
23
|
+
*/
|
|
24
|
+
async findByPath(path) {
|
|
25
|
+
try {
|
|
26
|
+
// Check if the path contains a valid workspace
|
|
27
|
+
if (!(await this.isValidWorkspace(path))) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
// Load workspace configuration
|
|
31
|
+
const config = await this.loadConfiguration(path);
|
|
32
|
+
// Create workspace ID from path
|
|
33
|
+
const id = WorkspaceId.fromPath(path.toString());
|
|
34
|
+
// Load packages
|
|
35
|
+
const packages = await this.loadPackages(path, config);
|
|
36
|
+
// Load catalogs
|
|
37
|
+
const catalogs = await this.loadCatalogs(config);
|
|
38
|
+
return Workspace.create(id, path, config, catalogs, packages);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error(`Failed to load workspace from ${path.toString()}:`, error);
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Find a workspace by its ID
|
|
47
|
+
*/
|
|
48
|
+
async findById(_id) {
|
|
49
|
+
// For file-based implementation, we would need to maintain a mapping
|
|
50
|
+
// of IDs to paths. For now, this is not implemented.
|
|
51
|
+
throw new Error('Finding workspace by ID is not implemented in file-based repository');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Save a workspace
|
|
55
|
+
*/
|
|
56
|
+
async save(workspace) {
|
|
57
|
+
try {
|
|
58
|
+
// Save workspace configuration
|
|
59
|
+
await this.saveConfiguration(workspace.getPath(), workspace.getConfig());
|
|
60
|
+
// Save packages (update their package.json files)
|
|
61
|
+
await this.savePackages(workspace.getPackages());
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
throw new Error(`Failed to save workspace: ${error}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Load workspace configuration from path
|
|
69
|
+
*/
|
|
70
|
+
async loadConfiguration(path) {
|
|
71
|
+
try {
|
|
72
|
+
const workspaceData = await this.fileSystemService.readPnpmWorkspaceConfig(path);
|
|
73
|
+
return WorkspaceConfig.fromWorkspaceData(workspaceData);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
throw new Error(`Failed to load workspace configuration from ${path.toString()}: ${error}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Save workspace configuration to path
|
|
81
|
+
*/
|
|
82
|
+
async saveConfiguration(path, config) {
|
|
83
|
+
try {
|
|
84
|
+
const workspaceData = config.toPnpmWorkspaceData();
|
|
85
|
+
await this.fileSystemService.writePnpmWorkspaceConfig(path, workspaceData);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
throw new Error(`Failed to save workspace configuration to ${path.toString()}: ${error}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if a path contains a valid pnpm workspace
|
|
93
|
+
*/
|
|
94
|
+
async isValidWorkspace(path) {
|
|
95
|
+
return await this.fileSystemService.isPnpmWorkspace(path.toString());
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Discover workspace from current working directory or given path
|
|
99
|
+
*/
|
|
100
|
+
async discoverWorkspace(searchPath) {
|
|
101
|
+
const startPath = searchPath?.toString() || process.cwd();
|
|
102
|
+
try {
|
|
103
|
+
const workspacePath = await this.fileSystemService.findNearestWorkspace(startPath);
|
|
104
|
+
if (!workspacePath) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
return await this.findByPath(WorkspacePath.fromString(workspacePath));
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
console.error(`Failed to discover workspace from ${startPath}:`, error);
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Load packages from workspace
|
|
116
|
+
*/
|
|
117
|
+
async loadPackages(workspacePath, config) {
|
|
118
|
+
try {
|
|
119
|
+
const packagePatterns = config.getPackagePatterns();
|
|
120
|
+
// Find all package.json files matching the patterns
|
|
121
|
+
const packageJsonFiles = await this.fileSystemService.findPackageJsonFiles(workspacePath, packagePatterns);
|
|
122
|
+
const packages = [];
|
|
123
|
+
for (const packageJsonPath of packageJsonFiles) {
|
|
124
|
+
try {
|
|
125
|
+
const packageDir = path.dirname(packageJsonPath);
|
|
126
|
+
const packagePath = WorkspacePath.fromString(packageDir);
|
|
127
|
+
// Read package.json
|
|
128
|
+
const packageData = await this.fileSystemService.readPackageJson(packagePath);
|
|
129
|
+
// Create package
|
|
130
|
+
const packageId = `${packageData.name}-${packageDir}`;
|
|
131
|
+
const pkg = Package.create(packageId, packageData.name, packagePath, packageData);
|
|
132
|
+
packages.push(pkg);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
console.warn(`Failed to load package from ${packageJsonPath}:`, error);
|
|
136
|
+
// Continue with other packages
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return PackageCollection.fromPackages(packages);
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
throw new Error(`Failed to load packages: ${error}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Load catalogs from workspace configuration
|
|
147
|
+
*/
|
|
148
|
+
async loadCatalogs(config) {
|
|
149
|
+
try {
|
|
150
|
+
const catalogs = [];
|
|
151
|
+
const catalogDefinitions = config.getCatalogDefinitions();
|
|
152
|
+
for (const [catalogName, catalogDef] of catalogDefinitions) {
|
|
153
|
+
const catalogId = `catalog-${catalogName}`;
|
|
154
|
+
const catalog = Catalog.create(catalogId, catalogName, catalogDef.getDependencies(), config.getCatalogMode());
|
|
155
|
+
catalogs.push(catalog);
|
|
156
|
+
}
|
|
157
|
+
return CatalogCollection.fromCatalogs(catalogs);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
throw new Error(`Failed to load catalogs: ${error}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Save packages (update their package.json files)
|
|
165
|
+
*/
|
|
166
|
+
async savePackages(packages) {
|
|
167
|
+
for (const pkg of packages.getAll()) {
|
|
168
|
+
try {
|
|
169
|
+
const packageData = pkg.toPackageJsonData();
|
|
170
|
+
await this.fileSystemService.writePackageJson(pkg.getPath(), packageData);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
console.error(`Failed to save package ${pkg.getName()}:`, error);
|
|
174
|
+
// Continue with other packages
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=FileWorkspaceRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileWorkspaceRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/FileWorkspaceRepository.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pnpm-catalog-updates",
|
|
3
|
+
"version": "0.1.1",
|
|
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": "Your Name",
|
|
19
|
+
"email": "your.email@example.com"
|
|
20
|
+
},
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://github.com/houko/pnpm-catalog-updater.git"
|
|
25
|
+
},
|
|
26
|
+
"bugs": {
|
|
27
|
+
"url": "https://github.com/houko/pnpm-catalog-updater/issues"
|
|
28
|
+
},
|
|
29
|
+
"homepage": "https://github.com/houko/pnpm-catalog-updater#readme",
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=18.0.0"
|
|
32
|
+
},
|
|
33
|
+
"type": "module",
|
|
34
|
+
"main": "./dist/index.js",
|
|
35
|
+
"module": "./dist/index.js",
|
|
36
|
+
"types": "./dist/index.d.ts",
|
|
37
|
+
"bin": {
|
|
38
|
+
"pcu": "./bin/pcu.js",
|
|
39
|
+
"pnpm-catalog-updater": "./bin/pcu.js"
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"dist",
|
|
43
|
+
"bin",
|
|
44
|
+
"README.md",
|
|
45
|
+
"LICENSE"
|
|
46
|
+
],
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"chalk": "^5.3.0",
|
|
49
|
+
"cli-table3": "^0.6.3",
|
|
50
|
+
"commander": "^11.1.0",
|
|
51
|
+
"fs-extra": "^11.2.0",
|
|
52
|
+
"glob": "^10.3.10",
|
|
53
|
+
"inquirer": "^9.2.12",
|
|
54
|
+
"libnpmconfig": "^1.2.1",
|
|
55
|
+
"lodash": "^4.17.21",
|
|
56
|
+
"node-fetch": "^3.3.2",
|
|
57
|
+
"npm-registry-fetch": "^16.2.1",
|
|
58
|
+
"ora": "^7.0.1",
|
|
59
|
+
"pacote": "^17.0.4",
|
|
60
|
+
"rxjs": "^7.8.1",
|
|
61
|
+
"semver": "^7.5.4",
|
|
62
|
+
"yaml": "^2.3.4",
|
|
63
|
+
"zod": "^3.22.4"
|
|
64
|
+
},
|
|
65
|
+
"devDependencies": {
|
|
66
|
+
"@changesets/cli": "^2.27.1",
|
|
67
|
+
"@types/fs-extra": "^11.0.4",
|
|
68
|
+
"@types/glob": "^8.1.0",
|
|
69
|
+
"@types/inquirer": "^9.0.7",
|
|
70
|
+
"@types/lodash": "^4.14.202",
|
|
71
|
+
"@types/node": "^20.10.6",
|
|
72
|
+
"@types/node-fetch": "^2.6.12",
|
|
73
|
+
"@types/semver": "^7.5.6",
|
|
74
|
+
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
|
75
|
+
"@typescript-eslint/parser": "^6.21.0",
|
|
76
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
77
|
+
"@vitest/ui": "^3.2.4",
|
|
78
|
+
"eslint": "^8.56.0",
|
|
79
|
+
"eslint-config-prettier": "^9.1.0",
|
|
80
|
+
"eslint-plugin-import": "^2.29.1",
|
|
81
|
+
"eslint-plugin-node": "^11.1.0",
|
|
82
|
+
"eslint-plugin-prettier": "^5.1.2",
|
|
83
|
+
"husky": "^8.0.3",
|
|
84
|
+
"lint-staged": "^15.2.0",
|
|
85
|
+
"msw": "^2.0.11",
|
|
86
|
+
"prettier": "^3.1.1",
|
|
87
|
+
"rimraf": "^5.0.5",
|
|
88
|
+
"tsx": "^4.7.0",
|
|
89
|
+
"typescript": "^5.3.3",
|
|
90
|
+
"vitest": "^3.2.4"
|
|
91
|
+
},
|
|
92
|
+
"lint-staged": {
|
|
93
|
+
"*.{ts,js}": [
|
|
94
|
+
"eslint --fix",
|
|
95
|
+
"prettier --write"
|
|
96
|
+
],
|
|
97
|
+
"*.{json,md,yml,yaml}": [
|
|
98
|
+
"prettier --write"
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
"volta": {
|
|
102
|
+
"node": ">=18.19.1",
|
|
103
|
+
"pnpm": ">=8.15.0"
|
|
104
|
+
},
|
|
105
|
+
"scripts": {
|
|
106
|
+
"build": "tsc && pnpm run build:bin",
|
|
107
|
+
"build:bin": "node scripts/build-bin.js",
|
|
108
|
+
"build:watch": "tsc --watch",
|
|
109
|
+
"dev": "tsx src/cli/index.ts",
|
|
110
|
+
"start": "node dist/cli/index.js",
|
|
111
|
+
"test": "vitest",
|
|
112
|
+
"test:watch": "vitest --watch",
|
|
113
|
+
"test:coverage": "vitest --coverage",
|
|
114
|
+
"test:e2e": "vitest --config vitest.e2e.config.ts",
|
|
115
|
+
"lint": "eslint src test --ext .ts,.js",
|
|
116
|
+
"lint:fix": "eslint src test --ext .ts,.js --fix",
|
|
117
|
+
"format": "prettier --write src test",
|
|
118
|
+
"format:check": "prettier --check src test",
|
|
119
|
+
"typecheck": "tsc --noEmit",
|
|
120
|
+
"clean": "rimraf dist bin/*.js",
|
|
121
|
+
"changeset": "changeset",
|
|
122
|
+
"version": "changeset version",
|
|
123
|
+
"release": "npm run build && changeset publish"
|
|
124
|
+
}
|
|
125
|
+
}
|