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,106 @@
1
+ /**
2
+ * NPM Registry Service
3
+ *
4
+ * Provides access to NPM registry for package version information.
5
+ * Handles API calls, caching, and version resolution.
6
+ */
7
+ import { Version, VersionRange } from '../../domain/value-objects/Version.js';
8
+ export interface PackageInfo {
9
+ name: string;
10
+ description?: string;
11
+ homepage?: string;
12
+ repository?: {
13
+ type: string;
14
+ url: string;
15
+ };
16
+ license?: string;
17
+ author?: string | {
18
+ name: string;
19
+ email?: string;
20
+ };
21
+ maintainers?: Array<{
22
+ name: string;
23
+ email?: string;
24
+ }>;
25
+ keywords?: string[];
26
+ versions: string[];
27
+ latestVersion: string;
28
+ tags: Record<string, string>;
29
+ time: Record<string, string>;
30
+ }
31
+ export interface SecurityVulnerability {
32
+ id: string;
33
+ title: string;
34
+ severity: 'low' | 'moderate' | 'high' | 'critical';
35
+ description: string;
36
+ reference: string;
37
+ vulnerable_versions: string;
38
+ patched_versions?: string;
39
+ recommendation?: string;
40
+ }
41
+ export interface SecurityReport {
42
+ package: string;
43
+ version: string;
44
+ vulnerabilities: SecurityVulnerability[];
45
+ hasVulnerabilities: boolean;
46
+ }
47
+ export declare class NpmRegistryService {
48
+ private readonly registryUrl;
49
+ private readonly timeout;
50
+ private readonly cache;
51
+ private readonly cacheTimeout;
52
+ constructor(registryUrl?: string, timeout?: number);
53
+ /**
54
+ * Get package information including all versions
55
+ */
56
+ getPackageInfo(packageName: string): Promise<PackageInfo>;
57
+ /**
58
+ * Get the latest version of a package
59
+ */
60
+ getLatestVersion(packageName: string): Promise<Version>;
61
+ /**
62
+ * Get the greatest version that satisfies a range
63
+ */
64
+ getGreatestVersion(packageName: string, range?: VersionRange): Promise<Version>;
65
+ /**
66
+ * Get versions by date (newest versions published)
67
+ */
68
+ getNewestVersions(packageName: string, count?: number): Promise<Version[]>;
69
+ /**
70
+ * Check for security vulnerabilities
71
+ */
72
+ checkSecurityVulnerabilities(packageName: string, version: string): Promise<SecurityReport>;
73
+ /**
74
+ * Batch query multiple packages
75
+ */
76
+ batchQueryVersions(packages: string[]): Promise<Map<string, PackageInfo>>;
77
+ /**
78
+ * Check if package author has changed
79
+ */
80
+ hasPackageAuthorChanged(packageName: string, fromVersion: string, toVersion: string): Promise<boolean>;
81
+ /**
82
+ * Get package download statistics
83
+ */
84
+ getDownloadStats(packageName: string, period?: 'last-day' | 'last-week' | 'last-month'): Promise<number>;
85
+ /**
86
+ * Clear cache
87
+ */
88
+ clearCache(): void;
89
+ /**
90
+ * Get item from cache if not expired
91
+ */
92
+ private getFromCache;
93
+ /**
94
+ * Set item in cache
95
+ */
96
+ private setCache;
97
+ /**
98
+ * Split array into chunks
99
+ */
100
+ private chunkArray;
101
+ /**
102
+ * Normalize author for comparison
103
+ */
104
+ private normalizeAuthor;
105
+ }
106
+ //# sourceMappingURL=NpmRegistryService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NpmRegistryService.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/external-services/NpmRegistryService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,303 @@
1
+ /**
2
+ * NPM Registry Service
3
+ *
4
+ * Provides access to NPM registry for package version information.
5
+ * Handles API calls, caching, and version resolution.
6
+ */
7
+ import npmRegistryFetch from 'npm-registry-fetch';
8
+ import pacote from 'pacote';
9
+ import semver from 'semver';
10
+ import fetch from 'node-fetch';
11
+ import { Version } from '../../domain/value-objects/Version.js';
12
+ export class NpmRegistryService {
13
+ registryUrl;
14
+ timeout;
15
+ cache = new Map();
16
+ cacheTimeout = 5 * 60 * 1000; // 5 minutes
17
+ constructor(registryUrl = 'https://registry.npmjs.org/', timeout = 30000) {
18
+ this.registryUrl = registryUrl;
19
+ this.timeout = timeout;
20
+ }
21
+ /**
22
+ * Get package information including all versions
23
+ */
24
+ async getPackageInfo(packageName) {
25
+ const cacheKey = `package-info:${packageName}`;
26
+ // Check cache first
27
+ const cached = this.getFromCache(cacheKey);
28
+ if (cached) {
29
+ return cached;
30
+ }
31
+ try {
32
+ const packument = await pacote.packument(packageName, {
33
+ registry: this.registryUrl,
34
+ timeout: this.timeout,
35
+ fullMetadata: true,
36
+ });
37
+ const versions = Object.keys(packument.versions || {}).sort(semver.rcompare);
38
+ const latestVersion = packument['dist-tags']?.latest || versions[0];
39
+ const packageInfo = {
40
+ name: packument.name,
41
+ description: packument.description,
42
+ homepage: packument.homepage,
43
+ repository: packument.repository,
44
+ license: packument.license,
45
+ author: packument.author,
46
+ maintainers: packument.maintainers,
47
+ keywords: packument.keywords,
48
+ versions,
49
+ latestVersion,
50
+ tags: packument['dist-tags'] || {},
51
+ time: packument.time || {},
52
+ };
53
+ // Cache the result
54
+ this.setCache(cacheKey, packageInfo);
55
+ return packageInfo;
56
+ }
57
+ catch (error) {
58
+ throw new Error(`Failed to fetch package info for ${packageName}: ${error}`);
59
+ }
60
+ }
61
+ /**
62
+ * Get the latest version of a package
63
+ */
64
+ async getLatestVersion(packageName) {
65
+ try {
66
+ const packageInfo = await this.getPackageInfo(packageName);
67
+ return Version.fromString(packageInfo.latestVersion);
68
+ }
69
+ catch (error) {
70
+ throw new Error(`Failed to get latest version for ${packageName}: ${error}`);
71
+ }
72
+ }
73
+ /**
74
+ * Get the greatest version that satisfies a range
75
+ */
76
+ async getGreatestVersion(packageName, range) {
77
+ try {
78
+ const packageInfo = await this.getPackageInfo(packageName);
79
+ if (!range) {
80
+ return Version.fromString(packageInfo.latestVersion);
81
+ }
82
+ // Find the greatest version that satisfies the range
83
+ const satisfyingVersions = packageInfo.versions.filter((v) => {
84
+ try {
85
+ const version = Version.fromString(v);
86
+ return version.satisfies(range);
87
+ }
88
+ catch {
89
+ return false;
90
+ }
91
+ });
92
+ if (satisfyingVersions.length === 0) {
93
+ throw new Error(`No versions satisfy range ${range.toString()}`);
94
+ }
95
+ // Return the first (greatest) version
96
+ if (!satisfyingVersions[0]) {
97
+ throw new Error(`No satisfying versions found for ${packageName}`);
98
+ }
99
+ return Version.fromString(satisfyingVersions[0]);
100
+ }
101
+ catch (error) {
102
+ throw new Error(`Failed to get greatest version for ${packageName}: ${error}`);
103
+ }
104
+ }
105
+ /**
106
+ * Get versions by date (newest versions published)
107
+ */
108
+ async getNewestVersions(packageName, count = 10) {
109
+ try {
110
+ const packageInfo = await this.getPackageInfo(packageName);
111
+ // Sort versions by publication time
112
+ const versionsWithTime = packageInfo.versions
113
+ .map((version) => ({
114
+ version,
115
+ time: packageInfo.time[version] ? new Date(packageInfo.time[version]) : new Date(0),
116
+ }))
117
+ .sort((a, b) => b.time.getTime() - a.time.getTime())
118
+ .slice(0, count);
119
+ return versionsWithTime.map((item) => Version.fromString(item.version));
120
+ }
121
+ catch (error) {
122
+ throw new Error(`Failed to get newest versions for ${packageName}: ${error}`);
123
+ }
124
+ }
125
+ /**
126
+ * Check for security vulnerabilities
127
+ */
128
+ async checkSecurityVulnerabilities(packageName, version) {
129
+ const cacheKey = `security:${packageName}@${version}`;
130
+ // Check cache first
131
+ const cached = this.getFromCache(cacheKey);
132
+ if (cached) {
133
+ return cached;
134
+ }
135
+ try {
136
+ // Use npm audit API
137
+ const auditData = {
138
+ name: packageName,
139
+ version: version,
140
+ requires: {},
141
+ dependencies: {},
142
+ };
143
+ const response = await npmRegistryFetch('/-/npm/v1/security/audits', {
144
+ method: 'POST',
145
+ body: JSON.stringify(auditData),
146
+ headers: {
147
+ 'Content-Type': 'application/json',
148
+ },
149
+ registry: this.registryUrl,
150
+ timeout: this.timeout,
151
+ });
152
+ const auditResult = await response.json();
153
+ const vulnerabilities = [];
154
+ // Parse audit results
155
+ if (auditResult.advisories) {
156
+ for (const advisory of Object.values(auditResult.advisories)) {
157
+ vulnerabilities.push({
158
+ id: advisory.id.toString(),
159
+ title: advisory.title,
160
+ severity: advisory.severity,
161
+ description: advisory.overview,
162
+ reference: advisory.url,
163
+ vulnerable_versions: advisory.vulnerable_versions,
164
+ patched_versions: advisory.patched_versions,
165
+ recommendation: advisory.recommendation,
166
+ });
167
+ }
168
+ }
169
+ const securityReport = {
170
+ package: packageName,
171
+ version: version,
172
+ vulnerabilities,
173
+ hasVulnerabilities: vulnerabilities.length > 0,
174
+ };
175
+ // Cache the result
176
+ this.setCache(cacheKey, securityReport);
177
+ return securityReport;
178
+ }
179
+ catch (error) {
180
+ // If security check fails, return empty report
181
+ console.warn(`Security check failed for ${packageName}@${version}:`, error);
182
+ const emptyReport = {
183
+ package: packageName,
184
+ version: version,
185
+ vulnerabilities: [],
186
+ hasVulnerabilities: false,
187
+ };
188
+ return emptyReport;
189
+ }
190
+ }
191
+ /**
192
+ * Batch query multiple packages
193
+ */
194
+ async batchQueryVersions(packages) {
195
+ const results = new Map();
196
+ // Process packages in parallel with limited concurrency
197
+ const concurrency = 5;
198
+ const chunks = this.chunkArray(packages, concurrency);
199
+ for (const chunk of chunks) {
200
+ const promises = chunk.map(async (packageName) => {
201
+ try {
202
+ const info = await this.getPackageInfo(packageName);
203
+ results.set(packageName, info);
204
+ }
205
+ catch (error) {
206
+ console.warn(`Failed to query package ${packageName}:`, error);
207
+ }
208
+ });
209
+ await Promise.all(promises);
210
+ }
211
+ return results;
212
+ }
213
+ /**
214
+ * Check if package author has changed
215
+ */
216
+ async hasPackageAuthorChanged(packageName, fromVersion, toVersion) {
217
+ try {
218
+ // const packageInfo = await this.getPackageInfo(packageName);
219
+ const fromVersionData = await pacote.manifest(`${packageName}@${fromVersion}`, {
220
+ registry: this.registryUrl,
221
+ timeout: this.timeout,
222
+ });
223
+ const toVersionData = await pacote.manifest(`${packageName}@${toVersion}`, {
224
+ registry: this.registryUrl,
225
+ timeout: this.timeout,
226
+ });
227
+ // Compare authors/maintainers
228
+ const fromAuthor = this.normalizeAuthor(fromVersionData.author);
229
+ const toAuthor = this.normalizeAuthor(toVersionData.author);
230
+ return fromAuthor !== toAuthor;
231
+ }
232
+ catch (error) {
233
+ console.warn(`Failed to check author change for ${packageName}:`, error);
234
+ return false;
235
+ }
236
+ }
237
+ /**
238
+ * Get package download statistics
239
+ */
240
+ async getDownloadStats(packageName, period = 'last-week') {
241
+ try {
242
+ const response = await fetch(`https://api.npmjs.org/downloads/point/${period}/${packageName}`);
243
+ const data = (await response.json());
244
+ return data.downloads || 0;
245
+ }
246
+ catch (error) {
247
+ console.warn(`Failed to get download stats for ${packageName}:`, error);
248
+ return 0;
249
+ }
250
+ }
251
+ /**
252
+ * Clear cache
253
+ */
254
+ clearCache() {
255
+ this.cache.clear();
256
+ }
257
+ /**
258
+ * Get item from cache if not expired
259
+ */
260
+ getFromCache(key) {
261
+ const cached = this.cache.get(key);
262
+ if (!cached) {
263
+ return null;
264
+ }
265
+ if (Date.now() - cached.timestamp > this.cacheTimeout) {
266
+ this.cache.delete(key);
267
+ return null;
268
+ }
269
+ return cached.data;
270
+ }
271
+ /**
272
+ * Set item in cache
273
+ */
274
+ setCache(key, data) {
275
+ this.cache.set(key, {
276
+ data,
277
+ timestamp: Date.now(),
278
+ });
279
+ }
280
+ /**
281
+ * Split array into chunks
282
+ */
283
+ chunkArray(array, size) {
284
+ const chunks = [];
285
+ for (let i = 0; i < array.length; i += size) {
286
+ chunks.push(array.slice(i, i + size));
287
+ }
288
+ return chunks;
289
+ }
290
+ /**
291
+ * Normalize author for comparison
292
+ */
293
+ normalizeAuthor(author) {
294
+ if (typeof author === 'string') {
295
+ return author.toLowerCase().trim();
296
+ }
297
+ if (typeof author === 'object' && author?.name) {
298
+ return author.name.toLowerCase().trim();
299
+ }
300
+ return '';
301
+ }
302
+ }
303
+ //# sourceMappingURL=NpmRegistryService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NpmRegistryService.js","sourceRoot":"","sources":["../../../src/infrastructure/external-services/NpmRegistryService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
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 { WorkspacePath } from '../../domain/value-objects/WorkspacePath.js';
8
+ import { PnpmWorkspaceData } from '../../domain/value-objects/WorkspaceConfig.js';
9
+ import { PackageJsonData } from '../../domain/entities/Package.js';
10
+ export declare class FileSystemService {
11
+ /**
12
+ * Check if a file exists
13
+ */
14
+ exists(filePath: string): Promise<boolean>;
15
+ /**
16
+ * Check if a path is a directory
17
+ */
18
+ isDirectory(dirPath: string): Promise<boolean>;
19
+ /**
20
+ * Read a text file
21
+ */
22
+ readTextFile(filePath: string): Promise<string>;
23
+ /**
24
+ * Write a text file
25
+ */
26
+ writeTextFile(filePath: string, content: string): Promise<void>;
27
+ /**
28
+ * Read and parse a JSON file
29
+ */
30
+ readJsonFile<T = any>(filePath: string): Promise<T>;
31
+ /**
32
+ * Write a JSON file
33
+ */
34
+ writeJsonFile(filePath: string, data: any, indent?: number): Promise<void>;
35
+ /**
36
+ * Read and parse a YAML file
37
+ */
38
+ readYamlFile<T = any>(filePath: string): Promise<T>;
39
+ /**
40
+ * Write a YAML file
41
+ */
42
+ writeYamlFile(filePath: string, data: any): Promise<void>;
43
+ /**
44
+ * Read pnpm-workspace.yaml configuration
45
+ */
46
+ readPnpmWorkspaceConfig(workspacePath: WorkspacePath): Promise<PnpmWorkspaceData>;
47
+ /**
48
+ * Write pnpm-workspace.yaml configuration
49
+ */
50
+ writePnpmWorkspaceConfig(workspacePath: WorkspacePath, config: PnpmWorkspaceData): Promise<void>;
51
+ /**
52
+ * Read package.json file
53
+ */
54
+ readPackageJson(packagePath: WorkspacePath): Promise<PackageJsonData>;
55
+ /**
56
+ * Write package.json file
57
+ */
58
+ writePackageJson(packagePath: WorkspacePath, packageData: PackageJsonData): Promise<void>;
59
+ /**
60
+ * Find package.json files using glob patterns
61
+ */
62
+ findPackageJsonFiles(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]>;
63
+ /**
64
+ * Find directories matching patterns
65
+ */
66
+ findDirectories(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]>;
67
+ /**
68
+ * Check if a directory contains a pnpm workspace
69
+ */
70
+ isPnpmWorkspace(dirPath: string): Promise<boolean>;
71
+ /**
72
+ * Find the nearest pnpm workspace by traversing up the directory tree
73
+ */
74
+ findNearestWorkspace(startPath: string): Promise<string | null>;
75
+ /**
76
+ * Get file modification time
77
+ */
78
+ getModificationTime(filePath: string): Promise<Date>;
79
+ /**
80
+ * Create a backup of a file
81
+ */
82
+ createBackup(filePath: string): Promise<string>;
83
+ /**
84
+ * Restore a file from backup
85
+ */
86
+ restoreFromBackup(originalPath: string, backupPath: string): Promise<void>;
87
+ /**
88
+ * Remove a file
89
+ */
90
+ removeFile(filePath: string): Promise<void>;
91
+ /**
92
+ * List files in a directory
93
+ */
94
+ listFiles(dirPath: string): Promise<string[]>;
95
+ /**
96
+ * List directories in a directory
97
+ */
98
+ listDirectories(dirPath: string): Promise<string[]>;
99
+ }
100
+ //# sourceMappingURL=FileSystemService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystemService.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/file-system/FileSystemService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,qBAAa,iBAAiB;IAC5B;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAShD;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASpD;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQrD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrE;;OAEG;IACG,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASzD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IASnF;;OAEG;IACG,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IASzD;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/D;;OAEG;IACG,uBAAuB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAUvF;;OAEG;IACG,wBAAwB,CAC5B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC;IAKhB;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAU3E;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/F;;OAEG;IACG,oBAAoB,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsB/F;;OAEG;IACG,eAAe,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmB1F;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQxD;;OAEG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAarE;;OAEG;IACG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1D;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYrD;;OAEG;IACG,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhF;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjD;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IASnD;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAU1D"}