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.
Files changed (156) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +335 -0
  3. package/bin/pcu.js +15 -0
  4. package/dist/application/services/CatalogUpdateService.d.ts +190 -0
  5. package/dist/application/services/CatalogUpdateService.d.ts.map +1 -0
  6. package/dist/application/services/CatalogUpdateService.js +521 -0
  7. package/dist/application/services/CatalogUpdateService.js.map +1 -0
  8. package/dist/application/services/WorkspaceService.d.ts +139 -0
  9. package/dist/application/services/WorkspaceService.d.ts.map +1 -0
  10. package/dist/application/services/WorkspaceService.js +340 -0
  11. package/dist/application/services/WorkspaceService.js.map +1 -0
  12. package/dist/cli/commands/CheckCommand.d.ts +41 -0
  13. package/dist/cli/commands/CheckCommand.d.ts.map +1 -0
  14. package/dist/cli/commands/CheckCommand.js +168 -0
  15. package/dist/cli/commands/CheckCommand.js.map +1 -0
  16. package/dist/cli/commands/UpdateCommand.d.ts +69 -0
  17. package/dist/cli/commands/UpdateCommand.d.ts.map +1 -0
  18. package/dist/cli/commands/UpdateCommand.js +361 -0
  19. package/dist/cli/commands/UpdateCommand.js.map +1 -0
  20. package/dist/cli/formatters/OutputFormatter.d.ts +95 -0
  21. package/dist/cli/formatters/OutputFormatter.d.ts.map +1 -0
  22. package/dist/cli/formatters/OutputFormatter.js +437 -0
  23. package/dist/cli/formatters/OutputFormatter.js.map +1 -0
  24. package/dist/cli/index.d.ts +12 -0
  25. package/dist/cli/index.d.ts.map +1 -0
  26. package/dist/cli/index.js +244 -0
  27. package/dist/cli/index.js.map +1 -0
  28. package/dist/cli/options/GlobalOptions.d.ts +117 -0
  29. package/dist/cli/options/GlobalOptions.d.ts.map +1 -0
  30. package/dist/cli/options/GlobalOptions.js +278 -0
  31. package/dist/cli/options/GlobalOptions.js.map +1 -0
  32. package/dist/cli/options/index.d.ts +5 -0
  33. package/dist/cli/options/index.d.ts.map +1 -0
  34. package/dist/cli/options/index.js +5 -0
  35. package/dist/cli/options/index.js.map +1 -0
  36. package/dist/cli/validators/CommandValidator.d.ts +60 -0
  37. package/dist/cli/validators/CommandValidator.d.ts.map +1 -0
  38. package/dist/cli/validators/CommandValidator.js +319 -0
  39. package/dist/cli/validators/CommandValidator.js.map +1 -0
  40. package/dist/cli/validators/index.d.ts +5 -0
  41. package/dist/cli/validators/index.d.ts.map +1 -0
  42. package/dist/cli/validators/index.js +5 -0
  43. package/dist/cli/validators/index.js.map +1 -0
  44. package/dist/common/config/Config.d.ts +142 -0
  45. package/dist/common/config/Config.d.ts.map +1 -0
  46. package/dist/common/config/Config.js +355 -0
  47. package/dist/common/config/Config.js.map +1 -0
  48. package/dist/common/config/index.d.ts +6 -0
  49. package/dist/common/config/index.d.ts.map +1 -0
  50. package/dist/common/config/index.js +6 -0
  51. package/dist/common/config/index.js.map +1 -0
  52. package/dist/common/logger/Logger.d.ts +110 -0
  53. package/dist/common/logger/Logger.d.ts.map +1 -0
  54. package/dist/common/logger/Logger.js +289 -0
  55. package/dist/common/logger/Logger.js.map +1 -0
  56. package/dist/common/logger/index.d.ts +6 -0
  57. package/dist/common/logger/index.d.ts.map +1 -0
  58. package/dist/common/logger/index.js +6 -0
  59. package/dist/common/logger/index.js.map +1 -0
  60. package/dist/common/types/cli.d.ts +265 -0
  61. package/dist/common/types/cli.d.ts.map +1 -0
  62. package/dist/common/types/cli.js +5 -0
  63. package/dist/common/types/cli.js.map +1 -0
  64. package/dist/common/types/core.d.ts +270 -0
  65. package/dist/common/types/core.d.ts.map +1 -0
  66. package/dist/common/types/core.js +32 -0
  67. package/dist/common/types/core.js.map +1 -0
  68. package/dist/common/types/index.d.ts +8 -0
  69. package/dist/common/types/index.d.ts.map +1 -0
  70. package/dist/common/types/index.js +8 -0
  71. package/dist/common/types/index.js.map +1 -0
  72. package/dist/common/utils/async.d.ts +74 -0
  73. package/dist/common/utils/async.d.ts.map +1 -0
  74. package/dist/common/utils/async.js +228 -0
  75. package/dist/common/utils/async.js.map +1 -0
  76. package/dist/common/utils/format.d.ts +32 -0
  77. package/dist/common/utils/format.d.ts.map +1 -0
  78. package/dist/common/utils/format.js +121 -0
  79. package/dist/common/utils/format.js.map +1 -0
  80. package/dist/common/utils/git.d.ts +44 -0
  81. package/dist/common/utils/git.d.ts.map +1 -0
  82. package/dist/common/utils/git.js +147 -0
  83. package/dist/common/utils/git.js.map +1 -0
  84. package/dist/common/utils/index.d.ts +11 -0
  85. package/dist/common/utils/index.d.ts.map +1 -0
  86. package/dist/common/utils/index.js +11 -0
  87. package/dist/common/utils/index.js.map +1 -0
  88. package/dist/common/utils/string.d.ts +56 -0
  89. package/dist/common/utils/string.d.ts.map +1 -0
  90. package/dist/common/utils/string.js +134 -0
  91. package/dist/common/utils/string.js.map +1 -0
  92. package/dist/common/utils/validation.d.ts +88 -0
  93. package/dist/common/utils/validation.d.ts.map +1 -0
  94. package/dist/common/utils/validation.js +281 -0
  95. package/dist/common/utils/validation.js.map +1 -0
  96. package/dist/domain/entities/Catalog.d.ts +117 -0
  97. package/dist/domain/entities/Catalog.d.ts.map +1 -0
  98. package/dist/domain/entities/Catalog.js +240 -0
  99. package/dist/domain/entities/Catalog.js.map +1 -0
  100. package/dist/domain/entities/Package.d.ts +142 -0
  101. package/dist/domain/entities/Package.d.ts.map +1 -0
  102. package/dist/domain/entities/Package.js +275 -0
  103. package/dist/domain/entities/Package.js.map +1 -0
  104. package/dist/domain/entities/Workspace.d.ts +95 -0
  105. package/dist/domain/entities/Workspace.d.ts.map +1 -0
  106. package/dist/domain/entities/Workspace.js +170 -0
  107. package/dist/domain/entities/Workspace.js.map +1 -0
  108. package/dist/domain/repositories/WorkspaceRepository.d.ts +41 -0
  109. package/dist/domain/repositories/WorkspaceRepository.d.ts.map +1 -0
  110. package/dist/domain/repositories/WorkspaceRepository.js +8 -0
  111. package/dist/domain/repositories/WorkspaceRepository.js.map +1 -0
  112. package/dist/domain/value-objects/CatalogCollection.d.ts +106 -0
  113. package/dist/domain/value-objects/CatalogCollection.d.ts.map +1 -0
  114. package/dist/domain/value-objects/CatalogCollection.js +230 -0
  115. package/dist/domain/value-objects/CatalogCollection.js.map +1 -0
  116. package/dist/domain/value-objects/PackageCollection.d.ts +122 -0
  117. package/dist/domain/value-objects/PackageCollection.d.ts.map +1 -0
  118. package/dist/domain/value-objects/PackageCollection.js +263 -0
  119. package/dist/domain/value-objects/PackageCollection.js.map +1 -0
  120. package/dist/domain/value-objects/Version.d.ts +141 -0
  121. package/dist/domain/value-objects/Version.d.ts.map +1 -0
  122. package/dist/domain/value-objects/Version.js +268 -0
  123. package/dist/domain/value-objects/Version.js.map +1 -0
  124. package/dist/domain/value-objects/WorkspaceConfig.d.ts +135 -0
  125. package/dist/domain/value-objects/WorkspaceConfig.d.ts.map +1 -0
  126. package/dist/domain/value-objects/WorkspaceConfig.js +307 -0
  127. package/dist/domain/value-objects/WorkspaceConfig.js.map +1 -0
  128. package/dist/domain/value-objects/WorkspaceId.d.ts +51 -0
  129. package/dist/domain/value-objects/WorkspaceId.d.ts.map +1 -0
  130. package/dist/domain/value-objects/WorkspaceId.js +104 -0
  131. package/dist/domain/value-objects/WorkspaceId.js.map +1 -0
  132. package/dist/domain/value-objects/WorkspacePath.d.ts +75 -0
  133. package/dist/domain/value-objects/WorkspacePath.d.ts.map +1 -0
  134. package/dist/domain/value-objects/WorkspacePath.js +128 -0
  135. package/dist/domain/value-objects/WorkspacePath.js.map +1 -0
  136. package/dist/infrastructure/cache/Cache.d.ts +161 -0
  137. package/dist/infrastructure/cache/Cache.d.ts.map +1 -0
  138. package/dist/infrastructure/cache/Cache.js +398 -0
  139. package/dist/infrastructure/cache/Cache.js.map +1 -0
  140. package/dist/infrastructure/cache/index.d.ts +6 -0
  141. package/dist/infrastructure/cache/index.d.ts.map +1 -0
  142. package/dist/infrastructure/cache/index.js +6 -0
  143. package/dist/infrastructure/cache/index.js.map +1 -0
  144. package/dist/infrastructure/external-services/NpmRegistryService.d.ts +106 -0
  145. package/dist/infrastructure/external-services/NpmRegistryService.d.ts.map +1 -0
  146. package/dist/infrastructure/external-services/NpmRegistryService.js +303 -0
  147. package/dist/infrastructure/external-services/NpmRegistryService.js.map +1 -0
  148. package/dist/infrastructure/file-system/FileSystemService.d.ts +100 -0
  149. package/dist/infrastructure/file-system/FileSystemService.d.ts.map +1 -0
  150. package/dist/infrastructure/file-system/FileSystemService.js +284 -0
  151. package/dist/infrastructure/file-system/FileSystemService.js.map +1 -0
  152. package/dist/infrastructure/repositories/FileWorkspaceRepository.d.ts +57 -0
  153. package/dist/infrastructure/repositories/FileWorkspaceRepository.d.ts.map +1 -0
  154. package/dist/infrastructure/repositories/FileWorkspaceRepository.js +179 -0
  155. package/dist/infrastructure/repositories/FileWorkspaceRepository.js.map +1 -0
  156. 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
+ }