Skip to content

Commit 8d941ef

Browse files
Merge pull request #9 from PatchPulse/update-prompt
feat: updated output to show which dependencies have been updated
2 parents e9b789e + 0d64d28 commit 8d941ef

File tree

7 files changed

+71
-10
lines changed

7 files changed

+71
-10
lines changed

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "patch-pulse",
3-
"version": "2.8.0",
3+
"version": "2.8.1",
44
"description": "Check for outdated npm dependencies",
55
"type": "module",
66
"bin": {
@@ -66,7 +66,7 @@
6666
"eslint-config-prettier": "10.1.5",
6767
"eslint-plugin-prettier": "5.5.0",
6868
"jiti": "2.4.2",
69-
"prettier": "3.6.0",
69+
"prettier": "3.6.1",
7070
"tsx": "4.20.3",
7171
"typescript": "5.8.3",
7272
"vitest": "3.2.4"

src/core/dependency-checker.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ export async function checkDependencyVersions(
6767
isOutdated,
6868
updateType,
6969
isSkipped,
70+
category,
7071
};
7172
});
7273

src/gen/version.gen.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
// Auto-generated file - do not edit manually
2-
export const VERSION = '2.8.0';
2+
export const VERSION = '2.8.1';

src/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,21 @@ async function main(): Promise<void> {
8383

8484
let depsToUpdate: Array<{
8585
packageName: string;
86+
currentVersion: string;
8687
latestVersion: string;
88+
updateType: 'patch' | 'minor' | 'major';
89+
category: string;
8790
}> = [];
8891

8992
if (updateType === 'patch') {
9093
depsToUpdate = outdatedDeps
9194
.filter(d => d.updateType === 'patch' && d.latestVersion)
9295
.map(d => ({
9396
packageName: d.packageName,
97+
currentVersion: d.currentVersion,
9498
latestVersion: d.latestVersion!,
99+
updateType: d.updateType!,
100+
category: d.category || 'Dependencies',
95101
}));
96102
} else if (updateType === 'minor') {
97103
depsToUpdate = outdatedDeps
@@ -102,14 +108,20 @@ async function main(): Promise<void> {
102108
)
103109
.map(d => ({
104110
packageName: d.packageName,
111+
currentVersion: d.currentVersion,
105112
latestVersion: d.latestVersion!,
113+
updateType: d.updateType!,
114+
category: d.category || 'Dependencies',
106115
}));
107116
} else if (updateType === 'all') {
108117
depsToUpdate = outdatedDeps
109118
.filter(d => d.latestVersion)
110119
.map(d => ({
111120
packageName: d.packageName,
121+
currentVersion: d.currentVersion,
112122
latestVersion: d.latestVersion!,
123+
updateType: d.updateType!,
124+
category: d.category || 'Dependencies',
113125
}));
114126
}
115127

src/services/package-manager.ts

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import chalk from 'chalk';
22
import { spawn } from 'child_process';
33
import { existsSync } from 'fs';
44
import { join } from 'path';
5+
import { pluralize } from '../utils/pluralize';
56

67
export type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';
78

@@ -107,20 +108,66 @@ export function runPackageManagerCommand(
107108
* @returns Promise that resolves when all updates are complete
108109
*/
109110
export async function updateDependencies(
110-
dependencies: Array<{ packageName: string; latestVersion: string }>,
111+
dependencies: Array<{
112+
packageName: string;
113+
currentVersion: string;
114+
latestVersion: string;
115+
updateType: 'patch' | 'minor' | 'major';
116+
category: string;
117+
}>,
111118
packageManager: PackageManagerInfo
112119
): Promise<void> {
113120
if (dependencies.length === 0) {
114121
console.log(chalk.yellow('No dependencies to update'));
115122
return;
116123
}
117124

125+
const dependencyWord = pluralize(
126+
dependencies.length,
127+
'dependency',
128+
'dependencies'
129+
);
130+
118131
console.log(
119132
chalk.cyan(
120-
`\n🔄 Updating ${dependencies.length} dependencies using ${packageManager.name}...`
133+
`\n🔄 Updating ${dependencies.length} ${dependencyWord} using ${packageManager.name}...`
121134
)
122135
);
123136

137+
// Group dependencies by category
138+
const groupedDeps = dependencies.reduce(
139+
(groups, dep) => {
140+
const category = dep.category || 'Dependencies';
141+
if (!groups[category]) {
142+
groups[category] = [];
143+
}
144+
groups[category].push(dep);
145+
return groups;
146+
},
147+
{} as Record<string, typeof dependencies>
148+
);
149+
150+
// Show version changes for each dependency grouped by category
151+
for (const [category, deps] of Object.entries(groupedDeps)) {
152+
if (deps.length > 0) {
153+
console.log(chalk.gray(`${category}:`));
154+
155+
for (const dep of deps) {
156+
const updateTypeColor = {
157+
major: chalk.yellow,
158+
minor: chalk.magenta,
159+
patch: chalk.blue,
160+
}[dep.updateType];
161+
const updateTypeLabel = updateTypeColor(`[${dep.updateType}]`);
162+
console.log(
163+
chalk.gray(
164+
` ${dep.packageName}: ${dep.currentVersion}${dep.latestVersion} ${updateTypeLabel}`
165+
)
166+
);
167+
}
168+
}
169+
}
170+
124171
try {
125172
// Build the arguments array for the package manager
126173
const args: string[] = [];
@@ -147,7 +194,7 @@ export async function updateDependencies(
147194

148195
console.log(
149196
chalk.green(
150-
`\n✅ Successfully updated ${dependencies.length} dependencies!`
197+
`\n✅ Successfully updated ${dependencies.length} ${dependencyWord}!`
151198
)
152199
);
153200
} catch (error) {

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export interface DependencyInfo {
1313
isOutdated: boolean;
1414
updateType?: 'patch' | 'minor' | 'major';
1515
isSkipped?: boolean;
16+
category?: string;
1617
}
1718

1819
export interface NpmPackageInfo {

0 commit comments

Comments
 (0)