Skip to content

Commit d400f28

Browse files
feat: update version to 1.0.2 and enhance performance metrics in scan and delete operations
1 parent d607381 commit d400f28

1 file changed

Lines changed: 62 additions & 15 deletions

File tree

index.ts

Lines changed: 62 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const LOGO = `
1212
\x1b[35m 🚀 Created by codingstark.com\x1b[0m
1313
`;
1414

15-
const CURRENT_VERSION = "1.0.1";
15+
const CURRENT_VERSION = "1.0.2";
1616
const PACKAGE_NAME = "bunkill";
1717

1818
const colors = {
@@ -57,6 +57,7 @@ class BunKill {
5757
private sortBy: "size" | "lastModified" | "path" = "size";
5858
private latestVersion: string | null = null;
5959
private hasUpdate = false;
60+
private lastSearchTime = 0;
6061

6162
async scan(options: ScanOptions): Promise<NodeModule[]> {
6263
await this.checkDailyUpdate();
@@ -212,10 +213,11 @@ class BunKill {
212213
clearInterval(progressInterval);
213214

214215
const endTime = performance.now();
216+
const elapsedMs = endTime - startTime;
217+
this.lastSearchTime = elapsedMs;
218+
const formattedTime = this.formatElapsedTime(elapsedMs);
215219
console.log(
216-
`\n${colors.green}\x1b[1m✅\x1b[0m Scan completed in ${
217-
(endTime - startTime).toFixed(2)
218-
}ms${colors.reset}`,
220+
`\n${colors.green}\x1b[1m✅\x1b[0m Scan completed in ${formattedTime}${colors.reset}`,
219221
);
220222
console.log(
221223
`${colors.blue}\x1b[1m📊\x1b[0m Found ${foundNodeModules} node_modules directories${colors.reset}`,
@@ -353,8 +355,11 @@ class BunKill {
353355
const render = () => {
354356
console.clear();
355357
console.log(LOGO);
358+
const searchTime = this.lastSearchTime > 0
359+
? this.formatElapsedTime(this.lastSearchTime)
360+
: "N/A";
356361
console.log(
357-
`${colors.bold}${colors.blue}Found ${this.nodeModules.length} node_modules directories${colors.reset}`,
362+
`${colors.bold}${colors.blue}Found ${this.nodeModules.length} node_modules directories${colors.reset} ${colors.gray}(search took ${searchTime})${colors.reset}`,
358363
);
359364
console.log(
360365
`${colors.cyan}BunKill v${CURRENT_VERSION}${colors.reset} | ${colors.gray}Use ↑/↓ to navigate, SPACE to select, ENTER to delete, q to quit${colors.reset}`,
@@ -584,6 +589,7 @@ class BunKill {
584589
`${colors.blue}\n🗑️ Deleting selected directories...${colors.reset}`,
585590
);
586591

592+
const deleteStartTime = performance.now();
587593
let deletedCount = 0;
588594
let freedSize = 0;
589595

@@ -611,6 +617,10 @@ class BunKill {
611617
this.nodeModules = this.nodeModules.filter((m) => !toDelete.includes(m));
612618
this.selectedIndices.clear();
613619

620+
const deleteEndTime = performance.now();
621+
const deleteElapsedMs = deleteEndTime - deleteStartTime;
622+
const deleteTime = this.formatElapsedTime(deleteElapsedMs);
623+
614624
console.log(
615625
`${colors.bold}${colors.green}\n🎉 Cleanup complete!${colors.reset}`,
616626
);
@@ -620,6 +630,9 @@ class BunKill {
620630
console.log(
621631
`${colors.green} Freed: ${filesize(freedSize)}${colors.reset}`,
622632
);
633+
console.log(
634+
`${colors.green} Time taken: ${deleteTime}${colors.reset}`,
635+
);
623636
console.log(
624637
`${colors.blue} Remaining: ${this.nodeModules.length} directories (${this.getTotalSize()})${colors.reset}`,
625638
);
@@ -670,10 +683,8 @@ class BunKill {
670683

671684
private shouldSkipDirectory(dirPath: string): boolean {
672685
const skipPatterns = [
673-
".bun",
674686
"/System",
675687
"/Library/Application Support",
676-
"/Library/Caches",
677688
"/Library/Frameworks",
678689
"/Applications",
679690
"/private",
@@ -683,7 +694,6 @@ class BunKill {
683694
"/tmp",
684695
"/var/tmp",
685696
"/var/log",
686-
"/var/cache",
687697
"/usr/bin",
688698
"/usr/sbin",
689699
"/usr/lib",
@@ -701,18 +711,34 @@ class BunKill {
701711
"Photo Booth Library",
702712
".app",
703713
".framework",
714+
];
715+
716+
const allowCachePatterns = [
717+
".bun",
718+
".npm",
704719
".vscode",
705-
".idea",
706-
".atom",
707-
".emacs.d",
708-
".yarn",
720+
".vscode-insiders",
709721
".cache",
710722
".config",
711-
".Trash",
712-
".Trash-",
713-
".DS_Store",
723+
".yarn",
714724
];
715725

726+
const skipCacheSubdirs = [
727+
"/Library/Caches/com.apple",
728+
"/Library/Caches/CloudKit",
729+
"/Library/Caches/Google",
730+
"/Library/Caches/Microsoft",
731+
];
732+
733+
const isAllowedCache = allowCachePatterns.some((pattern) =>
734+
dirPath.includes(pattern) &&
735+
!skipCacheSubdirs.some((skip) => dirPath.includes(skip))
736+
);
737+
738+
if (isAllowedCache) {
739+
return false;
740+
}
741+
716742
if (dirPath.includes(".npm/_npx")) {
717743
return false;
718744
}
@@ -735,6 +761,18 @@ class BunKill {
735761
return this.nodeModules;
736762
}
737763

764+
formatElapsedTime(ms: number): string {
765+
if (ms < 1000) {
766+
return `${ms.toFixed(0)}ms`;
767+
} else if (ms < 60000) {
768+
return `${(ms / 1000).toFixed(2)}s`;
769+
} else {
770+
const minutes = Math.floor(ms / 60000);
771+
const seconds = ((ms % 60000) / 1000).toFixed(1);
772+
return `${minutes}m ${seconds}s`;
773+
}
774+
}
775+
738776
private async checkDailyUpdate() {
739777
try {
740778
const updateCheckFile = join(
@@ -855,14 +893,23 @@ program
855893
console.log(
856894
`${colors.red}\x1b[1mDeleting all ${modules.length} node_modules...${colors.reset}`,
857895
);
896+
897+
const deleteStartTime = performance.now();
858898
await Promise.allSettled(
859899
modules.map((module) =>
860900
rm(module.path, { recursive: true, force: true })
861901
),
862902
);
903+
const deleteEndTime = performance.now();
904+
const deleteElapsedMs = deleteEndTime - deleteStartTime;
905+
const deleteTime = bunkill.formatElapsedTime(deleteElapsedMs);
906+
863907
console.log(
864908
`${colors.green}\x1b[1m✅ Deleted ${modules.length} node_modules${colors.reset}`,
865909
);
910+
console.log(
911+
`${colors.green} Time taken: ${deleteTime}${colors.reset}`,
912+
);
866913
} else if (options.dryRun) {
867914
console.log(
868915
`${colors.blue}\x1b[1mDRY RUN - No files will be deleted\x1b[0m${colors.reset}`,

0 commit comments

Comments
 (0)