pcu 0.5.6 → 0.6.3

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 (219) hide show
  1. package/bin/pcu.js +1 -1
  2. package/dist/index.js +9559 -32
  3. package/dist/index.js.map +1 -1
  4. package/package.json +36 -84
  5. package/src/cli/commands/checkCommand.ts +227 -0
  6. package/src/cli/commands/initCommand.ts +394 -0
  7. package/src/cli/commands/securityCommand.ts +569 -0
  8. package/src/cli/commands/updateCommand.ts +245 -0
  9. package/src/cli/formatters/outputFormatter.ts +830 -0
  10. package/src/cli/formatters/progressBar.ts +700 -0
  11. package/src/cli/index.ts +565 -0
  12. package/src/cli/interactive/interactivePrompts.ts +517 -0
  13. package/src/cli/options/globalOptions.ts +380 -0
  14. package/src/cli/options/index.ts +5 -0
  15. package/src/cli/themes/colorTheme.ts +379 -0
  16. package/src/cli/validators/commandValidator.ts +395 -0
  17. package/src/cli/validators/index.ts +5 -0
  18. package/src/index.ts +4 -0
  19. package/README.ja.md +0 -582
  20. package/README.md +0 -690
  21. package/README.zh-CN.md +0 -630
  22. package/dist/application/services/CatalogUpdateService.d.ts +0 -209
  23. package/dist/application/services/CatalogUpdateService.d.ts.map +0 -1
  24. package/dist/application/services/CatalogUpdateService.js +0 -836
  25. package/dist/application/services/CatalogUpdateService.js.map +0 -1
  26. package/dist/application/services/WorkspaceService.d.ts +0 -139
  27. package/dist/application/services/WorkspaceService.d.ts.map +0 -1
  28. package/dist/application/services/WorkspaceService.js +0 -340
  29. package/dist/application/services/WorkspaceService.js.map +0 -1
  30. package/dist/cli/commands/CheckCommand.d.ts +0 -40
  31. package/dist/cli/commands/CheckCommand.d.ts.map +0 -1
  32. package/dist/cli/commands/CheckCommand.js +0 -177
  33. package/dist/cli/commands/CheckCommand.js.map +0 -1
  34. package/dist/cli/commands/InitCommand.d.ts +0 -53
  35. package/dist/cli/commands/InitCommand.d.ts.map +0 -1
  36. package/dist/cli/commands/InitCommand.js +0 -338
  37. package/dist/cli/commands/InitCommand.js.map +0 -1
  38. package/dist/cli/commands/SecurityCommand.d.ts +0 -113
  39. package/dist/cli/commands/SecurityCommand.d.ts.map +0 -1
  40. package/dist/cli/commands/SecurityCommand.js +0 -410
  41. package/dist/cli/commands/SecurityCommand.js.map +0 -1
  42. package/dist/cli/commands/UpdateCommand.d.ts +0 -44
  43. package/dist/cli/commands/UpdateCommand.d.ts.map +0 -1
  44. package/dist/cli/commands/UpdateCommand.js +0 -189
  45. package/dist/cli/commands/UpdateCommand.js.map +0 -1
  46. package/dist/cli/formatters/OutputFormatter.d.ts +0 -116
  47. package/dist/cli/formatters/OutputFormatter.d.ts.map +0 -1
  48. package/dist/cli/formatters/OutputFormatter.js +0 -664
  49. package/dist/cli/formatters/OutputFormatter.js.map +0 -1
  50. package/dist/cli/formatters/ProgressBar.d.ts +0 -195
  51. package/dist/cli/formatters/ProgressBar.d.ts.map +0 -1
  52. package/dist/cli/formatters/ProgressBar.js +0 -622
  53. package/dist/cli/formatters/ProgressBar.js.map +0 -1
  54. package/dist/cli/index.d.ts +0 -12
  55. package/dist/cli/index.d.ts.map +0 -1
  56. package/dist/cli/index.js +0 -492
  57. package/dist/cli/index.js.map +0 -1
  58. package/dist/cli/interactive/InteractivePrompts.d.ts +0 -85
  59. package/dist/cli/interactive/InteractivePrompts.d.ts.map +0 -1
  60. package/dist/cli/interactive/InteractivePrompts.js +0 -434
  61. package/dist/cli/interactive/InteractivePrompts.js.map +0 -1
  62. package/dist/cli/options/GlobalOptions.d.ts +0 -117
  63. package/dist/cli/options/GlobalOptions.d.ts.map +0 -1
  64. package/dist/cli/options/GlobalOptions.js +0 -278
  65. package/dist/cli/options/GlobalOptions.js.map +0 -1
  66. package/dist/cli/options/index.d.ts +0 -5
  67. package/dist/cli/options/index.d.ts.map +0 -1
  68. package/dist/cli/options/index.js +0 -5
  69. package/dist/cli/options/index.js.map +0 -1
  70. package/dist/cli/themes/ColorTheme.d.ts +0 -211
  71. package/dist/cli/themes/ColorTheme.d.ts.map +0 -1
  72. package/dist/cli/themes/ColorTheme.js +0 -267
  73. package/dist/cli/themes/ColorTheme.js.map +0 -1
  74. package/dist/cli/validators/CommandValidator.d.ts +0 -60
  75. package/dist/cli/validators/CommandValidator.d.ts.map +0 -1
  76. package/dist/cli/validators/CommandValidator.js +0 -319
  77. package/dist/cli/validators/CommandValidator.js.map +0 -1
  78. package/dist/cli/validators/index.d.ts +0 -5
  79. package/dist/cli/validators/index.d.ts.map +0 -1
  80. package/dist/cli/validators/index.js +0 -5
  81. package/dist/cli/validators/index.js.map +0 -1
  82. package/dist/common/config/Config.d.ts +0 -142
  83. package/dist/common/config/Config.d.ts.map +0 -1
  84. package/dist/common/config/Config.js +0 -382
  85. package/dist/common/config/Config.js.map +0 -1
  86. package/dist/common/config/ConfigLoader.d.ts +0 -49
  87. package/dist/common/config/ConfigLoader.d.ts.map +0 -1
  88. package/dist/common/config/ConfigLoader.js +0 -180
  89. package/dist/common/config/ConfigLoader.js.map +0 -1
  90. package/dist/common/config/PackageFilterConfig.d.ts +0 -56
  91. package/dist/common/config/PackageFilterConfig.d.ts.map +0 -1
  92. package/dist/common/config/PackageFilterConfig.js +0 -94
  93. package/dist/common/config/PackageFilterConfig.js.map +0 -1
  94. package/dist/common/config/index.d.ts +0 -8
  95. package/dist/common/config/index.d.ts.map +0 -1
  96. package/dist/common/config/index.js +0 -8
  97. package/dist/common/config/index.js.map +0 -1
  98. package/dist/common/error-handling/ErrorTracker.d.ts +0 -48
  99. package/dist/common/error-handling/ErrorTracker.d.ts.map +0 -1
  100. package/dist/common/error-handling/ErrorTracker.js +0 -93
  101. package/dist/common/error-handling/ErrorTracker.js.map +0 -1
  102. package/dist/common/error-handling/UserFriendlyErrorHandler.d.ts +0 -74
  103. package/dist/common/error-handling/UserFriendlyErrorHandler.d.ts.map +0 -1
  104. package/dist/common/error-handling/UserFriendlyErrorHandler.js +0 -703
  105. package/dist/common/error-handling/UserFriendlyErrorHandler.js.map +0 -1
  106. package/dist/common/error-handling/index.d.ts +0 -11
  107. package/dist/common/error-handling/index.d.ts.map +0 -1
  108. package/dist/common/error-handling/index.js +0 -9
  109. package/dist/common/error-handling/index.js.map +0 -1
  110. package/dist/common/logger/Logger.d.ts +0 -110
  111. package/dist/common/logger/Logger.d.ts.map +0 -1
  112. package/dist/common/logger/Logger.js +0 -289
  113. package/dist/common/logger/Logger.js.map +0 -1
  114. package/dist/common/logger/index.d.ts +0 -6
  115. package/dist/common/logger/index.d.ts.map +0 -1
  116. package/dist/common/logger/index.js +0 -6
  117. package/dist/common/logger/index.js.map +0 -1
  118. package/dist/common/types/cli.d.ts +0 -265
  119. package/dist/common/types/cli.d.ts.map +0 -1
  120. package/dist/common/types/cli.js +0 -5
  121. package/dist/common/types/cli.js.map +0 -1
  122. package/dist/common/types/core.d.ts +0 -270
  123. package/dist/common/types/core.d.ts.map +0 -1
  124. package/dist/common/types/core.js +0 -32
  125. package/dist/common/types/core.js.map +0 -1
  126. package/dist/common/types/index.d.ts +0 -8
  127. package/dist/common/types/index.d.ts.map +0 -1
  128. package/dist/common/types/index.js +0 -8
  129. package/dist/common/types/index.js.map +0 -1
  130. package/dist/common/utils/VersionChecker.d.ts +0 -54
  131. package/dist/common/utils/VersionChecker.d.ts.map +0 -1
  132. package/dist/common/utils/VersionChecker.js +0 -180
  133. package/dist/common/utils/VersionChecker.js.map +0 -1
  134. package/dist/common/utils/async.d.ts +0 -74
  135. package/dist/common/utils/async.d.ts.map +0 -1
  136. package/dist/common/utils/async.js +0 -228
  137. package/dist/common/utils/async.js.map +0 -1
  138. package/dist/common/utils/format.d.ts +0 -32
  139. package/dist/common/utils/format.d.ts.map +0 -1
  140. package/dist/common/utils/format.js +0 -121
  141. package/dist/common/utils/format.js.map +0 -1
  142. package/dist/common/utils/git.d.ts +0 -44
  143. package/dist/common/utils/git.d.ts.map +0 -1
  144. package/dist/common/utils/git.js +0 -147
  145. package/dist/common/utils/git.js.map +0 -1
  146. package/dist/common/utils/index.d.ts +0 -12
  147. package/dist/common/utils/index.d.ts.map +0 -1
  148. package/dist/common/utils/index.js +0 -12
  149. package/dist/common/utils/index.js.map +0 -1
  150. package/dist/common/utils/string.d.ts +0 -56
  151. package/dist/common/utils/string.d.ts.map +0 -1
  152. package/dist/common/utils/string.js +0 -134
  153. package/dist/common/utils/string.js.map +0 -1
  154. package/dist/common/utils/validation.d.ts +0 -88
  155. package/dist/common/utils/validation.d.ts.map +0 -1
  156. package/dist/common/utils/validation.js +0 -308
  157. package/dist/common/utils/validation.js.map +0 -1
  158. package/dist/domain/entities/Catalog.d.ts +0 -117
  159. package/dist/domain/entities/Catalog.d.ts.map +0 -1
  160. package/dist/domain/entities/Catalog.js +0 -240
  161. package/dist/domain/entities/Catalog.js.map +0 -1
  162. package/dist/domain/entities/Package.d.ts +0 -143
  163. package/dist/domain/entities/Package.d.ts.map +0 -1
  164. package/dist/domain/entities/Package.js +0 -272
  165. package/dist/domain/entities/Package.js.map +0 -1
  166. package/dist/domain/entities/Workspace.d.ts +0 -95
  167. package/dist/domain/entities/Workspace.d.ts.map +0 -1
  168. package/dist/domain/entities/Workspace.js +0 -173
  169. package/dist/domain/entities/Workspace.js.map +0 -1
  170. package/dist/domain/repositories/WorkspaceRepository.d.ts +0 -41
  171. package/dist/domain/repositories/WorkspaceRepository.d.ts.map +0 -1
  172. package/dist/domain/repositories/WorkspaceRepository.js +0 -8
  173. package/dist/domain/repositories/WorkspaceRepository.js.map +0 -1
  174. package/dist/domain/value-objects/CatalogCollection.d.ts +0 -106
  175. package/dist/domain/value-objects/CatalogCollection.d.ts.map +0 -1
  176. package/dist/domain/value-objects/CatalogCollection.js +0 -230
  177. package/dist/domain/value-objects/CatalogCollection.js.map +0 -1
  178. package/dist/domain/value-objects/PackageCollection.d.ts +0 -122
  179. package/dist/domain/value-objects/PackageCollection.d.ts.map +0 -1
  180. package/dist/domain/value-objects/PackageCollection.js +0 -263
  181. package/dist/domain/value-objects/PackageCollection.js.map +0 -1
  182. package/dist/domain/value-objects/Version.d.ts +0 -141
  183. package/dist/domain/value-objects/Version.d.ts.map +0 -1
  184. package/dist/domain/value-objects/Version.js +0 -268
  185. package/dist/domain/value-objects/Version.js.map +0 -1
  186. package/dist/domain/value-objects/WorkspaceConfig.d.ts +0 -144
  187. package/dist/domain/value-objects/WorkspaceConfig.d.ts.map +0 -1
  188. package/dist/domain/value-objects/WorkspaceConfig.js +0 -357
  189. package/dist/domain/value-objects/WorkspaceConfig.js.map +0 -1
  190. package/dist/domain/value-objects/WorkspaceId.d.ts +0 -51
  191. package/dist/domain/value-objects/WorkspaceId.d.ts.map +0 -1
  192. package/dist/domain/value-objects/WorkspaceId.js +0 -104
  193. package/dist/domain/value-objects/WorkspaceId.js.map +0 -1
  194. package/dist/domain/value-objects/WorkspacePath.d.ts +0 -75
  195. package/dist/domain/value-objects/WorkspacePath.d.ts.map +0 -1
  196. package/dist/domain/value-objects/WorkspacePath.js +0 -128
  197. package/dist/domain/value-objects/WorkspacePath.js.map +0 -1
  198. package/dist/index.d.ts +0 -25
  199. package/dist/index.d.ts.map +0 -1
  200. package/dist/infrastructure/cache/Cache.d.ts +0 -161
  201. package/dist/infrastructure/cache/Cache.d.ts.map +0 -1
  202. package/dist/infrastructure/cache/Cache.js +0 -398
  203. package/dist/infrastructure/cache/Cache.js.map +0 -1
  204. package/dist/infrastructure/cache/index.d.ts +0 -6
  205. package/dist/infrastructure/cache/index.d.ts.map +0 -1
  206. package/dist/infrastructure/cache/index.js +0 -6
  207. package/dist/infrastructure/cache/index.js.map +0 -1
  208. package/dist/infrastructure/external-services/NpmRegistryService.d.ts +0 -145
  209. package/dist/infrastructure/external-services/NpmRegistryService.d.ts.map +0 -1
  210. package/dist/infrastructure/external-services/NpmRegistryService.js +0 -466
  211. package/dist/infrastructure/external-services/NpmRegistryService.js.map +0 -1
  212. package/dist/infrastructure/file-system/FileSystemService.d.ts +0 -120
  213. package/dist/infrastructure/file-system/FileSystemService.d.ts.map +0 -1
  214. package/dist/infrastructure/file-system/FileSystemService.js +0 -663
  215. package/dist/infrastructure/file-system/FileSystemService.js.map +0 -1
  216. package/dist/infrastructure/repositories/FileWorkspaceRepository.d.ts +0 -57
  217. package/dist/infrastructure/repositories/FileWorkspaceRepository.d.ts.map +0 -1
  218. package/dist/infrastructure/repositories/FileWorkspaceRepository.js +0 -179
  219. package/dist/infrastructure/repositories/FileWorkspaceRepository.js.map +0 -1
@@ -1,466 +0,0 @@
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 { Version } from '../../domain/value-objects/Version.js';
11
- import { UserFriendlyErrorHandler } from '../../common/error-handling/UserFriendlyErrorHandler.js';
12
- export class NpmRegistryService {
13
- registryUrl;
14
- cache = new Map();
15
- // Differentiated cache timeouts for different data types
16
- versionCacheTimeout;
17
- packageInfoCacheTimeout;
18
- securityCacheTimeout;
19
- // Advanced configuration with defaults
20
- concurrency;
21
- timeout;
22
- retries;
23
- cachingEnabled;
24
- constructor(registryUrl = 'https://registry.npmjs.org/', options = {}) {
25
- this.registryUrl = registryUrl;
26
- this.concurrency = options.concurrency ?? 8; // Increased from 5 to match NCU performance
27
- this.timeout = options.timeout ?? 15000; // Reduced from 30s to 15s for faster failure detection
28
- this.retries = options.retries ?? 2; // Reduced from 3 to 2 for faster overall performance
29
- // Optimized cache timeouts for different data types
30
- const baseCacheMinutes = options.cacheValidityMinutes ?? 10; // Reduced from 60 to 10 minutes
31
- this.versionCacheTimeout = baseCacheMinutes * 60 * 1000; // Version info: 10 minutes (frequently checked)
32
- this.packageInfoCacheTimeout = baseCacheMinutes * 2 * 60 * 1000; // Package info: 20 minutes
33
- this.securityCacheTimeout = baseCacheMinutes * 6 * 60 * 1000; // Security info: 60 minutes (changes less frequently)
34
- this.cachingEnabled = baseCacheMinutes > 0; // Disable caching if set to 0
35
- }
36
- /**
37
- * Execute a function with retry logic
38
- */
39
- async executeWithRetry(fn, context = 'operation') {
40
- let lastError;
41
- for (let attempt = 1; attempt <= this.retries; attempt++) {
42
- try {
43
- return await fn();
44
- }
45
- catch (error) {
46
- lastError = error;
47
- if (attempt === this.retries) {
48
- throw new Error(`${context} failed after ${this.retries} attempts: ${lastError.message}`);
49
- }
50
- // Exponential backoff: wait 1s, 2s, 4s, etc.
51
- const delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);
52
- await new Promise((resolve) => setTimeout(resolve, delay));
53
- // Extract package name from context for better error handling
54
- const packageName = context.includes('for ')
55
- ? context.split('for ')[1] || 'unknown package'
56
- : 'unknown package';
57
- UserFriendlyErrorHandler.handleRetryAttempt(packageName, attempt, this.retries, lastError);
58
- }
59
- }
60
- throw lastError;
61
- }
62
- /**
63
- * Get lightweight package version information (optimized for performance)
64
- */
65
- async getPackageVersions(packageName) {
66
- const cacheKey = `package-versions:${packageName}`;
67
- // Check cache first if caching is enabled
68
- if (this.cachingEnabled) {
69
- const cached = this.getFromCache(cacheKey);
70
- if (cached) {
71
- return cached;
72
- }
73
- }
74
- const packageVersions = await this.executeWithRetry(async () => {
75
- // Use lightweight packument call without fullMetadata
76
- const packument = await pacote.packument(packageName, {
77
- registry: this.registryUrl,
78
- timeout: this.timeout,
79
- fullMetadata: false, // Key optimization: don't fetch full metadata
80
- });
81
- const versions = Object.keys(packument.versions || {}).sort(semver.rcompare);
82
- const latestVersion = packument['dist-tags']?.latest || versions[0];
83
- return {
84
- name: packument.name,
85
- versions,
86
- latestVersion,
87
- tags: packument['dist-tags'] || {},
88
- time: packument.time || {}, // Still include time for newest versions feature
89
- };
90
- }, `Fetching package versions for ${packageName}`);
91
- // Cache the result if caching is enabled
92
- if (this.cachingEnabled) {
93
- this.setCache(cacheKey, packageVersions);
94
- }
95
- return packageVersions;
96
- }
97
- /**
98
- * Get package information including all versions
99
- * @deprecated Use getPackageVersions() for better performance
100
- */
101
- async getPackageInfo(packageName) {
102
- const cacheKey = `package-info:${packageName}`;
103
- // Check cache first if caching is enabled
104
- if (this.cachingEnabled) {
105
- const cached = this.getFromCache(cacheKey);
106
- if (cached) {
107
- return cached;
108
- }
109
- }
110
- // Use lightweight version and extend with additional metadata only if needed
111
- const versionInfo = await this.getPackageVersions(packageName);
112
- const packageInfo = await this.executeWithRetry(async () => {
113
- // Only fetch full metadata if we actually need the extended info
114
- const packument = await pacote.packument(packageName, {
115
- registry: this.registryUrl,
116
- timeout: this.timeout,
117
- fullMetadata: true,
118
- });
119
- return {
120
- name: versionInfo.name,
121
- description: packument.description,
122
- homepage: packument.homepage,
123
- repository: packument.repository,
124
- license: packument.license,
125
- author: packument.author,
126
- maintainers: packument.maintainers,
127
- keywords: packument.keywords,
128
- versions: versionInfo.versions,
129
- latestVersion: versionInfo.latestVersion,
130
- tags: versionInfo.tags,
131
- time: versionInfo.time || {},
132
- };
133
- }, `Fetching package info for ${packageName}`);
134
- // Cache the result if caching is enabled
135
- if (this.cachingEnabled) {
136
- this.setCache(cacheKey, packageInfo);
137
- }
138
- return packageInfo;
139
- }
140
- /**
141
- * Get the latest version of a package
142
- */
143
- async getLatestVersion(packageName) {
144
- try {
145
- const versionInfo = await this.getPackageVersions(packageName);
146
- return Version.fromString(versionInfo.latestVersion);
147
- }
148
- catch (error) {
149
- throw new Error(`Failed to get latest version for ${packageName}: ${error}`);
150
- }
151
- }
152
- /**
153
- * Get the greatest version that satisfies a range
154
- */
155
- async getGreatestVersion(packageName, range) {
156
- try {
157
- const versionInfo = await this.getPackageVersions(packageName);
158
- if (!range) {
159
- return Version.fromString(versionInfo.latestVersion);
160
- }
161
- // Find the greatest version that satisfies the range
162
- const satisfyingVersions = versionInfo.versions.filter((v) => {
163
- try {
164
- const version = Version.fromString(v);
165
- return version.satisfies(range);
166
- }
167
- catch {
168
- return false;
169
- }
170
- });
171
- if (satisfyingVersions.length === 0) {
172
- throw new Error(`No versions satisfy range ${range.toString()}`);
173
- }
174
- // Return the first (greatest) version
175
- if (!satisfyingVersions[0]) {
176
- throw new Error(`No satisfying versions found for ${packageName}`);
177
- }
178
- return Version.fromString(satisfyingVersions[0]);
179
- }
180
- catch (error) {
181
- throw new Error(`Failed to get greatest version for ${packageName}: ${error}`);
182
- }
183
- }
184
- /**
185
- * Get versions by date (newest versions published)
186
- */
187
- async getNewestVersions(packageName, count = 10) {
188
- try {
189
- const versionInfo = await this.getPackageVersions(packageName);
190
- // Sort versions by publication time
191
- const versionsWithTime = versionInfo.versions
192
- .map((version) => ({
193
- version,
194
- time: versionInfo.time?.[version] ? new Date(versionInfo.time[version]) : new Date(0),
195
- }))
196
- .sort((a, b) => b.time.getTime() - a.time.getTime())
197
- .slice(0, count);
198
- return versionsWithTime.map((item) => Version.fromString(item.version));
199
- }
200
- catch (error) {
201
- throw new Error(`Failed to get newest versions for ${packageName}: ${error}`);
202
- }
203
- }
204
- /**
205
- * Check for security vulnerabilities
206
- */
207
- async checkSecurityVulnerabilities(packageName, version) {
208
- const cacheKey = `security:${packageName}@${version}`;
209
- // Check cache first
210
- const cached = this.getFromCache(cacheKey);
211
- if (cached) {
212
- return cached;
213
- }
214
- try {
215
- // Use npm audit API
216
- const auditData = {
217
- name: packageName,
218
- version: version,
219
- requires: {},
220
- dependencies: {},
221
- };
222
- const response = await npmRegistryFetch('/-/npm/v1/security/audits', {
223
- method: 'POST',
224
- body: JSON.stringify(auditData),
225
- headers: {
226
- 'Content-Type': 'application/json',
227
- },
228
- registry: this.registryUrl,
229
- timeout: this.timeout,
230
- });
231
- const auditResult = await response.json();
232
- const vulnerabilities = [];
233
- // Parse audit results
234
- if (auditResult.advisories) {
235
- for (const advisory of Object.values(auditResult.advisories)) {
236
- vulnerabilities.push({
237
- id: advisory.id.toString(),
238
- title: advisory.title,
239
- severity: advisory.severity,
240
- description: advisory.overview,
241
- reference: advisory.url,
242
- vulnerable_versions: advisory.vulnerable_versions,
243
- patched_versions: advisory.patched_versions,
244
- recommendation: advisory.recommendation,
245
- });
246
- }
247
- }
248
- const securityReport = {
249
- package: packageName,
250
- version: version,
251
- vulnerabilities,
252
- hasVulnerabilities: vulnerabilities.length > 0,
253
- };
254
- // Cache the result
255
- this.setCache(cacheKey, securityReport);
256
- return securityReport;
257
- }
258
- catch (error) {
259
- // If security check fails, return empty report
260
- UserFriendlyErrorHandler.handleSecurityCheckFailure(packageName, error);
261
- const emptyReport = {
262
- package: packageName,
263
- version: version,
264
- vulnerabilities: [],
265
- hasVulnerabilities: false,
266
- };
267
- return emptyReport;
268
- }
269
- }
270
- /**
271
- * Batch query multiple packages with progress tracking
272
- */
273
- async batchQueryVersions(packages, progressCallback) {
274
- const results = new Map();
275
- let completed = 0;
276
- const total = packages.length;
277
- // Process packages in parallel with configurable concurrency
278
- const chunks = this.chunkArray(packages, this.concurrency);
279
- for (const chunk of chunks) {
280
- const promises = chunk.map(async (packageName) => {
281
- try {
282
- const info = await this.getPackageInfo(packageName);
283
- results.set(packageName, info);
284
- // Update progress
285
- completed++;
286
- if (progressCallback) {
287
- progressCallback(completed, total, packageName);
288
- }
289
- }
290
- catch (error) {
291
- // Still count failed packages in progress
292
- completed++;
293
- if (progressCallback) {
294
- progressCallback(completed, total, packageName);
295
- }
296
- UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error);
297
- }
298
- });
299
- await Promise.all(promises);
300
- }
301
- return results;
302
- }
303
- /**
304
- * Check if package author has changed
305
- */
306
- async hasPackageAuthorChanged(packageName, fromVersion, toVersion) {
307
- try {
308
- // const packageInfo = await this.getPackageInfo(packageName);
309
- const fromVersionData = await pacote.manifest(`${packageName}@${fromVersion}`, {
310
- registry: this.registryUrl,
311
- timeout: this.timeout,
312
- });
313
- const toVersionData = await pacote.manifest(`${packageName}@${toVersion}`, {
314
- registry: this.registryUrl,
315
- timeout: this.timeout,
316
- });
317
- // Compare authors/maintainers
318
- const fromAuthor = this.normalizeAuthor(fromVersionData.author);
319
- const toAuthor = this.normalizeAuthor(toVersionData.author);
320
- return fromAuthor !== toAuthor;
321
- }
322
- catch (error) {
323
- // Log for debugging, don't show to user as this is not critical
324
- UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error, {
325
- operation: 'author-check',
326
- });
327
- return false;
328
- }
329
- }
330
- /**
331
- * Get package download statistics
332
- */
333
- async getDownloadStats(packageName, period = 'last-week') {
334
- try {
335
- const response = await fetch(`https://api.npmjs.org/downloads/point/${period}/${packageName}`);
336
- if (!response.ok) {
337
- throw new Error(`HTTP error! status: ${response.status}`);
338
- }
339
- const data = (await response.json());
340
- return data.downloads || 0;
341
- }
342
- catch (error) {
343
- // Log for debugging, don't show to user as this is not critical
344
- UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error, {
345
- operation: 'download-stats',
346
- });
347
- return 0;
348
- }
349
- }
350
- /**
351
- * Clear all cache
352
- */
353
- clearCache() {
354
- this.cache.clear();
355
- }
356
- /**
357
- * Clear cache by type
358
- */
359
- clearCacheByType(type = 'all') {
360
- if (type === 'all') {
361
- this.clearCache();
362
- return;
363
- }
364
- const prefix = type === 'versions'
365
- ? 'package-versions:'
366
- : type === 'package-info'
367
- ? 'package-info:'
368
- : 'security:';
369
- const keysToDelete = [];
370
- for (const key of this.cache.keys()) {
371
- if (key.startsWith(prefix)) {
372
- keysToDelete.push(key);
373
- }
374
- }
375
- keysToDelete.forEach((key) => this.cache.delete(key));
376
- }
377
- /**
378
- * Get cache statistics
379
- */
380
- getCacheStats() {
381
- const stats = { total: 0, versions: 0, packageInfo: 0, security: 0, expired: 0 };
382
- const now = Date.now();
383
- for (const [key, cached] of this.cache.entries()) {
384
- stats.total++;
385
- const timeout = this.getCacheTimeout(key);
386
- if (now - cached.timestamp > timeout) {
387
- stats.expired++;
388
- continue;
389
- }
390
- if (key.startsWith('package-versions:')) {
391
- stats.versions++;
392
- }
393
- else if (key.startsWith('package-info:')) {
394
- stats.packageInfo++;
395
- }
396
- else if (key.startsWith('security:')) {
397
- stats.security++;
398
- }
399
- }
400
- return stats;
401
- }
402
- /**
403
- * Get item from cache if not expired
404
- */
405
- getFromCache(key) {
406
- const cached = this.cache.get(key);
407
- if (!cached) {
408
- return null;
409
- }
410
- // Determine timeout based on cache key type
411
- const timeout = this.getCacheTimeout(key);
412
- if (Date.now() - cached.timestamp > timeout) {
413
- this.cache.delete(key);
414
- return null;
415
- }
416
- return cached.data;
417
- }
418
- /**
419
- * Get appropriate cache timeout based on key type
420
- */
421
- getCacheTimeout(key) {
422
- if (key.startsWith('package-versions:')) {
423
- return this.versionCacheTimeout;
424
- }
425
- else if (key.startsWith('security:')) {
426
- return this.securityCacheTimeout;
427
- }
428
- else if (key.startsWith('package-info:')) {
429
- return this.packageInfoCacheTimeout;
430
- }
431
- // Default to version cache timeout for unknown keys
432
- return this.versionCacheTimeout;
433
- }
434
- /**
435
- * Set item in cache
436
- */
437
- setCache(key, data) {
438
- this.cache.set(key, {
439
- data,
440
- timestamp: Date.now(),
441
- });
442
- }
443
- /**
444
- * Split array into chunks
445
- */
446
- chunkArray(array, size) {
447
- const chunks = [];
448
- for (let i = 0; i < array.length; i += size) {
449
- chunks.push(array.slice(i, i + size));
450
- }
451
- return chunks;
452
- }
453
- /**
454
- * Normalize author for comparison
455
- */
456
- normalizeAuthor(author) {
457
- if (typeof author === 'string') {
458
- return author.toLowerCase().trim();
459
- }
460
- if (typeof author === 'object' && author?.name) {
461
- return author.name.toLowerCase().trim();
462
- }
463
- return '';
464
- }
465
- }
466
- //# sourceMappingURL=NpmRegistryService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NpmRegistryService.js","sourceRoot":"","sources":["../../../src/infrastructure/external-services/NpmRegistryService.ts"],"names":[],"mappings":"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"}
@@ -1,120 +0,0 @@
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 { PackageJsonData } from '../../domain/entities/Package.js';
8
- import { PnpmWorkspaceData } from '../../domain/value-objects/WorkspaceConfig.js';
9
- import { WorkspacePath } from '../../domain/value-objects/WorkspacePath.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
- * Write a YAML file while preserving comments and formatting
45
- */
46
- writeYamlFilePreservingFormat(filePath: string, data: any): Promise<void>;
47
- /**
48
- * Update YAML content while preserving comments and formatting
49
- */
50
- private updateYamlPreservingFormat;
51
- /**
52
- * Format a YAML section with proper indentation while preserving internal structure
53
- */
54
- private formatYamlSection;
55
- /**
56
- * Format catalogs section while preserving structure and comments
57
- */
58
- private formatCatalogsSection;
59
- /**
60
- * Check if a package exists in a catalog section
61
- */
62
- private packageExistsInCatalogSection;
63
- /**
64
- * Read pnpm-workspace.yaml configuration
65
- */
66
- readPnpmWorkspaceConfig(workspacePath: WorkspacePath): Promise<PnpmWorkspaceData>;
67
- /**
68
- * Write pnpm-workspace.yaml configuration
69
- */
70
- writePnpmWorkspaceConfig(workspacePath: WorkspacePath, config: PnpmWorkspaceData): Promise<void>;
71
- /**
72
- * Read package.json file
73
- */
74
- readPackageJson(packagePath: WorkspacePath): Promise<PackageJsonData>;
75
- /**
76
- * Write package.json file
77
- */
78
- writePackageJson(packagePath: WorkspacePath, packageData: PackageJsonData): Promise<void>;
79
- /**
80
- * Find package.json files using glob patterns
81
- */
82
- findPackageJsonFiles(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]>;
83
- /**
84
- * Find directories matching patterns
85
- */
86
- findDirectories(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]>;
87
- /**
88
- * Check if a directory contains a pnpm workspace
89
- */
90
- isPnpmWorkspace(dirPath: string): Promise<boolean>;
91
- /**
92
- * Find the nearest pnpm workspace by traversing up the directory tree
93
- */
94
- findNearestWorkspace(startPath: string): Promise<string | null>;
95
- /**
96
- * Get file modification time
97
- */
98
- getModificationTime(filePath: string): Promise<Date>;
99
- /**
100
- * Create a backup of a file
101
- */
102
- createBackup(filePath: string): Promise<string>;
103
- /**
104
- * Restore a file from backup
105
- */
106
- restoreFromBackup(originalPath: string, backupPath: string): Promise<void>;
107
- /**
108
- * Remove a file
109
- */
110
- removeFile(filePath: string): Promise<void>;
111
- /**
112
- * List files in a directory
113
- */
114
- listFiles(dirPath: string): Promise<string[]>;
115
- /**
116
- * List directories in a directory
117
- */
118
- listDirectories(dirPath: string): Promise<string[]>;
119
- }
120
- //# sourceMappingURL=FileSystemService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FileSystemService.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/file-system/FileSystemService.ts"],"names":[],"mappings":"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"}