squeaky-clean 0.1.7 → 0.1.8
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.
- package/dist/cleaners/cursor.d.ts +15 -0
- package/dist/cleaners/cursor.d.ts.map +1 -0
- package/dist/cleaners/cursor.js +377 -0
- package/dist/cleaners/cursor.js.map +1 -0
- package/dist/cleaners/index.d.ts.map +1 -1
- package/dist/cleaners/index.js +24 -0
- package/dist/cleaners/index.js.map +1 -1
- package/dist/cleaners/playwright.d.ts +15 -0
- package/dist/cleaners/playwright.d.ts.map +1 -0
- package/dist/cleaners/playwright.js +221 -0
- package/dist/cleaners/playwright.js.map +1 -0
- package/dist/cleaners/universalBinary.d.ts +20 -0
- package/dist/cleaners/universalBinary.d.ts.map +1 -0
- package/dist/cleaners/universalBinary.js +318 -0
- package/dist/cleaners/universalBinary.js.map +1 -0
- package/dist/cleaners/vscode.d.ts +1 -0
- package/dist/cleaners/vscode.d.ts.map +1 -1
- package/dist/cleaners/vscode.js +68 -11
- package/dist/cleaners/vscode.js.map +1 -1
- package/dist/cleaners/windsurf.d.ts +15 -0
- package/dist/cleaners/windsurf.d.ts.map +1 -0
- package/dist/cleaners/windsurf.js +366 -0
- package/dist/cleaners/windsurf.js.map +1 -0
- package/dist/cleaners/zed.d.ts +15 -0
- package/dist/cleaners/zed.d.ts.map +1 -0
- package/dist/cleaners/zed.js +383 -0
- package/dist/cleaners/zed.js.map +1 -0
- package/dist/cli.js +23 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/auto.d.ts.map +1 -1
- package/dist/commands/auto.js +46 -19
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/config.js +16 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/ub.d.ts +10 -0
- package/dist/commands/ub.d.ts.map +1 -0
- package/dist/commands/ub.js +170 -0
- package/dist/commands/ub.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +36 -7
- package/dist/config/index.js.map +1 -1
- package/dist/profiles/index.d.ts.map +1 -1
- package/dist/profiles/index.js +48 -3
- package/dist/profiles/index.js.map +1 -1
- package/dist/types/index.d.ts +16 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/cli.d.ts +2 -0
- package/dist/utils/cli.d.ts.map +1 -1
- package/dist/utils/cli.js +2 -0
- package/dist/utils/cli.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PlaywrightCleaner = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const execa_1 = __importDefault(require("execa"));
|
|
11
|
+
const fs_2 = require("../utils/fs");
|
|
12
|
+
const cli_1 = require("../utils/cli");
|
|
13
|
+
class PlaywrightCleaner {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.name = "playwright";
|
|
16
|
+
this.type = "build-tool";
|
|
17
|
+
this.description = "Playwright browser binaries, test artifacts, and cache files";
|
|
18
|
+
}
|
|
19
|
+
getCachePaths() {
|
|
20
|
+
const homeDir = os_1.default.homedir();
|
|
21
|
+
const platform = process.platform;
|
|
22
|
+
const paths = [];
|
|
23
|
+
if (platform === "darwin") {
|
|
24
|
+
// macOS Playwright cache locations
|
|
25
|
+
paths.push({
|
|
26
|
+
path: path_1.default.join(homeDir, "Library", "Caches", "ms-playwright"),
|
|
27
|
+
description: "Playwright browser binaries (Chromium, Firefox, WebKit)",
|
|
28
|
+
category: "browsers",
|
|
29
|
+
priority: "normal",
|
|
30
|
+
}, {
|
|
31
|
+
path: path_1.default.join(homeDir, "Library", "Caches", "ms-playwright-go"),
|
|
32
|
+
description: "Playwright Go bindings cache",
|
|
33
|
+
category: "browsers",
|
|
34
|
+
priority: "normal",
|
|
35
|
+
}, {
|
|
36
|
+
path: path_1.default.join(homeDir, "Library", "Caches", "org.webkit.Playwright"),
|
|
37
|
+
description: "WebKit Playwright cache",
|
|
38
|
+
category: "browsers",
|
|
39
|
+
priority: "low",
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
else if (platform === "win32") {
|
|
43
|
+
// Windows Playwright cache locations
|
|
44
|
+
const localAppData = process.env.LOCALAPPDATA || path_1.default.join(homeDir, "AppData", "Local");
|
|
45
|
+
paths.push({
|
|
46
|
+
path: path_1.default.join(localAppData, "ms-playwright"),
|
|
47
|
+
description: "Playwright browser binaries",
|
|
48
|
+
category: "browsers",
|
|
49
|
+
priority: "normal",
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Linux Playwright cache locations
|
|
54
|
+
paths.push({
|
|
55
|
+
path: path_1.default.join(homeDir, ".cache", "ms-playwright"),
|
|
56
|
+
description: "Playwright browser binaries",
|
|
57
|
+
category: "browsers",
|
|
58
|
+
priority: "normal",
|
|
59
|
+
}, {
|
|
60
|
+
path: path_1.default.join(homeDir, ".cache", "ms-playwright-go"),
|
|
61
|
+
description: "Playwright Go bindings cache",
|
|
62
|
+
category: "browsers",
|
|
63
|
+
priority: "normal",
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return paths;
|
|
67
|
+
}
|
|
68
|
+
async isAvailable() {
|
|
69
|
+
const cachePaths = this.getCachePaths();
|
|
70
|
+
for (const { path: cachePath } of cachePaths) {
|
|
71
|
+
if (await (0, fs_2.pathExists)(cachePath)) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Also check if playwright is installed via npm
|
|
76
|
+
try {
|
|
77
|
+
await (0, execa_1.default)("npx", ["playwright", "--version"], { timeout: 5000 });
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async getCacheInfo() {
|
|
85
|
+
const cachePaths = this.getCachePaths();
|
|
86
|
+
const existingPaths = [];
|
|
87
|
+
let totalSize = 0;
|
|
88
|
+
for (const { path: cachePath } of cachePaths) {
|
|
89
|
+
if (await (0, fs_2.pathExists)(cachePath)) {
|
|
90
|
+
existingPaths.push(cachePath);
|
|
91
|
+
const size = await (0, fs_2.getEstimatedDirectorySize)(cachePath);
|
|
92
|
+
totalSize += size;
|
|
93
|
+
(0, cli_1.printVerbose)(` 🔍 📁 ${cachePath}: ${(size / (1024 * 1024)).toFixed(1)} MB`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
name: this.name,
|
|
98
|
+
type: this.type,
|
|
99
|
+
description: this.description,
|
|
100
|
+
paths: existingPaths,
|
|
101
|
+
isInstalled: existingPaths.length > 0,
|
|
102
|
+
size: totalSize,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
async getCacheCategories() {
|
|
106
|
+
const cachePaths = this.getCachePaths();
|
|
107
|
+
const categories = [];
|
|
108
|
+
for (const { path: cachePath, description, category, priority } of cachePaths) {
|
|
109
|
+
if (await (0, fs_2.pathExists)(cachePath)) {
|
|
110
|
+
const size = await (0, fs_2.getDirectorySize)(cachePath);
|
|
111
|
+
let stats;
|
|
112
|
+
try {
|
|
113
|
+
stats = await fs_1.promises.stat(cachePath);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
stats = null;
|
|
117
|
+
}
|
|
118
|
+
categories.push({
|
|
119
|
+
id: `playwright-${category}`,
|
|
120
|
+
name: `Playwright ${category}`,
|
|
121
|
+
description,
|
|
122
|
+
paths: [cachePath],
|
|
123
|
+
size,
|
|
124
|
+
lastModified: stats?.mtime,
|
|
125
|
+
priority,
|
|
126
|
+
useCase: "testing",
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return categories;
|
|
131
|
+
}
|
|
132
|
+
async clear(dryRun = false, _criteria, _cacheInfo, protectedPaths) {
|
|
133
|
+
const cachePaths = this.getCachePaths();
|
|
134
|
+
const clearedPaths = [];
|
|
135
|
+
let sizeBefore = 0;
|
|
136
|
+
let sizeAfter = 0;
|
|
137
|
+
for (const { path: cachePath, description } of cachePaths) {
|
|
138
|
+
if (!(await (0, fs_2.pathExists)(cachePath)))
|
|
139
|
+
continue;
|
|
140
|
+
// Check if path is protected
|
|
141
|
+
if (protectedPaths?.some((p) => cachePath.startsWith(p))) {
|
|
142
|
+
(0, cli_1.printVerbose)(` Skipping protected path: ${cachePath}`);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
const pathSize = await (0, fs_2.getDirectorySize)(cachePath);
|
|
146
|
+
sizeBefore += pathSize;
|
|
147
|
+
if (dryRun) {
|
|
148
|
+
(0, cli_1.printVerbose)(` [DRY RUN] Would clear: ${description} (${(pathSize / (1024 * 1024)).toFixed(1)} MB)`);
|
|
149
|
+
clearedPaths.push(cachePath);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
try {
|
|
153
|
+
await (0, fs_2.safeRmrf)(cachePath);
|
|
154
|
+
clearedPaths.push(cachePath);
|
|
155
|
+
(0, cli_1.printVerbose)(` ✓ Cleared: ${description}`);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
(0, cli_1.printVerbose)(` ✗ Failed to clear ${description}: ${error}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (!dryRun) {
|
|
163
|
+
for (const { path: cachePath } of cachePaths) {
|
|
164
|
+
if (await (0, fs_2.pathExists)(cachePath)) {
|
|
165
|
+
sizeAfter += await (0, fs_2.getDirectorySize)(cachePath);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
name: this.name,
|
|
171
|
+
success: true,
|
|
172
|
+
sizeBefore,
|
|
173
|
+
sizeAfter: dryRun ? sizeBefore : sizeAfter,
|
|
174
|
+
clearedPaths,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
async clearByCategory(categoryIds, dryRun = false, _cacheInfo, protectedPaths) {
|
|
178
|
+
const categories = await this.getCacheCategories();
|
|
179
|
+
const targetCategories = categories.filter((c) => categoryIds.includes(c.id));
|
|
180
|
+
const clearedPaths = [];
|
|
181
|
+
let sizeBefore = 0;
|
|
182
|
+
let sizeAfter = 0;
|
|
183
|
+
for (const category of targetCategories) {
|
|
184
|
+
for (const cachePath of category.paths) {
|
|
185
|
+
if (!(await (0, fs_2.pathExists)(cachePath)))
|
|
186
|
+
continue;
|
|
187
|
+
if (protectedPaths?.some((p) => cachePath.startsWith(p))) {
|
|
188
|
+
(0, cli_1.printVerbose)(` Skipping protected path: ${cachePath}`);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const pathSize = await (0, fs_2.getDirectorySize)(cachePath);
|
|
192
|
+
sizeBefore += pathSize;
|
|
193
|
+
if (dryRun) {
|
|
194
|
+
(0, cli_1.printVerbose)(` [DRY RUN] Would clear: ${category.name} (${(pathSize / (1024 * 1024)).toFixed(1)} MB)`);
|
|
195
|
+
clearedPaths.push(cachePath);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
try {
|
|
199
|
+
await (0, fs_2.safeRmrf)(cachePath);
|
|
200
|
+
clearedPaths.push(cachePath);
|
|
201
|
+
(0, cli_1.printVerbose)(` ✓ Cleared: ${category.name}`);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
(0, cli_1.printVerbose)(` ✗ Failed to clear ${category.name}: ${error}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
name: this.name,
|
|
211
|
+
success: true,
|
|
212
|
+
sizeBefore,
|
|
213
|
+
sizeAfter: dryRun ? sizeBefore : sizeAfter,
|
|
214
|
+
clearedPaths,
|
|
215
|
+
clearedCategories: categoryIds,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
exports.PlaywrightCleaner = PlaywrightCleaner;
|
|
220
|
+
exports.default = new PlaywrightCleaner();
|
|
221
|
+
//# sourceMappingURL=playwright.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright.js","sourceRoot":"","sources":["../../src/cleaners/playwright.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { CacheInfo, ClearResult, CleanerModule, CacheSelectionCriteria, CacheCategory } from "../types";
|
|
2
|
+
export declare class UniversalBinaryCleaner implements CleanerModule {
|
|
3
|
+
name: string;
|
|
4
|
+
type: "system";
|
|
5
|
+
description: string;
|
|
6
|
+
private universalBinaries;
|
|
7
|
+
isAvailable(): Promise<boolean>;
|
|
8
|
+
private findExecutablesInApp;
|
|
9
|
+
private checkIfUniversal;
|
|
10
|
+
private getBinarySize;
|
|
11
|
+
private scanForUniversalBinaries;
|
|
12
|
+
getCacheInfo(): Promise<CacheInfo>;
|
|
13
|
+
getCacheCategories(): Promise<CacheCategory[]>;
|
|
14
|
+
clear(dryRun?: boolean, criteria?: CacheSelectionCriteria, cacheInfo?: CacheInfo): Promise<ClearResult>;
|
|
15
|
+
clearByCategory(categoryIds: string[], dryRun?: boolean): Promise<ClearResult>;
|
|
16
|
+
static create(): UniversalBinaryCleaner;
|
|
17
|
+
}
|
|
18
|
+
declare const _default: UniversalBinaryCleaner;
|
|
19
|
+
export default _default;
|
|
20
|
+
//# sourceMappingURL=universalBinary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"universalBinary.d.ts","sourceRoot":"","sources":["../../src/cleaners/universalBinary.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,aAAa,EACd,MAAM,UAAU,CAAC;AA+BlB,qBAAa,sBAAuB,YAAW,aAAa;IAC1D,IAAI,SAAsB;IAC1B,IAAI,EAAG,QAAQ,CAAU;IACzB,WAAW,SAC+D;IAE1E,OAAO,CAAC,iBAAiB,CAA6B;IAEhD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;YAyBvB,oBAAoB;YAqCpB,gBAAgB;YAkChB,aAAa;YASb,wBAAwB;IAyDhC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAsClC,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAkB9C,KAAK,CACT,MAAM,UAAQ,EACd,QAAQ,CAAC,EAAE,sBAAsB,EACjC,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,WAAW,CAAC;IAmIjB,eAAe,CACnB,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,UAAQ,GACb,OAAO,CAAC,WAAW,CAAC;IAIvB,MAAM,CAAC,MAAM,IAAI,sBAAsB;CAGxC;;AAED,wBAA+C"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.UniversalBinaryCleaner = void 0;
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const os_1 = __importDefault(require("os"));
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const util_1 = require("util");
|
|
12
|
+
const fs_2 = require("../utils/fs");
|
|
13
|
+
const cli_1 = require("../utils/cli");
|
|
14
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
15
|
+
// Common application directories to scan for Universal binaries
|
|
16
|
+
const APP_DIRECTORIES = [
|
|
17
|
+
"/Applications",
|
|
18
|
+
"/Applications/Utilities",
|
|
19
|
+
path_1.default.join(os_1.default.homedir(), "Applications"),
|
|
20
|
+
];
|
|
21
|
+
// Executables to skip (system critical or known problematic)
|
|
22
|
+
const SKIP_EXECUTABLES = new Set([
|
|
23
|
+
"Finder",
|
|
24
|
+
"SystemUIServer",
|
|
25
|
+
"loginwindow",
|
|
26
|
+
"launchd",
|
|
27
|
+
"kernel",
|
|
28
|
+
]);
|
|
29
|
+
class UniversalBinaryCleaner {
|
|
30
|
+
constructor() {
|
|
31
|
+
this.name = "universal-binary";
|
|
32
|
+
this.type = "system";
|
|
33
|
+
this.description = "Thin Universal Binaries on Apple Silicon to remove unused x86_64 code";
|
|
34
|
+
this.universalBinaries = [];
|
|
35
|
+
}
|
|
36
|
+
async isAvailable() {
|
|
37
|
+
// Only available on macOS with Apple Silicon
|
|
38
|
+
if (process.platform !== "darwin") {
|
|
39
|
+
(0, cli_1.printVerbose)("Universal Binary cleaner only available on macOS");
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const { stdout } = await execAsync("uname -m");
|
|
44
|
+
const arch = stdout.trim();
|
|
45
|
+
if (arch !== "arm64") {
|
|
46
|
+
(0, cli_1.printVerbose)(`Universal Binary cleaner requires Apple Silicon (arm64), found: ${arch}`);
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
// Verify lipo is available
|
|
50
|
+
await execAsync("which lipo");
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async findExecutablesInApp(appPath) {
|
|
58
|
+
const executables = [];
|
|
59
|
+
const macosPath = path_1.default.join(appPath, "Contents", "MacOS");
|
|
60
|
+
try {
|
|
61
|
+
if (!(await (0, fs_2.pathExists)(macosPath))) {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
const entries = await fs_1.promises.readdir(macosPath);
|
|
65
|
+
for (const entry of entries) {
|
|
66
|
+
const fullPath = path_1.default.join(macosPath, entry);
|
|
67
|
+
try {
|
|
68
|
+
const stat = await fs_1.promises.stat(fullPath);
|
|
69
|
+
if (stat.isFile()) {
|
|
70
|
+
// Check if it's an executable (not a script or config)
|
|
71
|
+
const { stdout } = await execAsync(`file "${fullPath}" 2>/dev/null`);
|
|
72
|
+
if (stdout.includes("Mach-O") &&
|
|
73
|
+
!SKIP_EXECUTABLES.has(path_1.default.basename(fullPath))) {
|
|
74
|
+
executables.push(fullPath);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Skip files we can't stat
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Skip apps we can't read
|
|
85
|
+
}
|
|
86
|
+
return executables;
|
|
87
|
+
}
|
|
88
|
+
async checkIfUniversal(binaryPath) {
|
|
89
|
+
try {
|
|
90
|
+
const { stdout } = await execAsync(`lipo -info "${binaryPath}" 2>&1`);
|
|
91
|
+
// Parse lipo output: "Architectures in the fat file: /path are: x86_64 arm64"
|
|
92
|
+
// or "Non-fat file: /path is architecture: arm64"
|
|
93
|
+
if (stdout.includes("Architectures in the fat file")) {
|
|
94
|
+
const archMatch = stdout.match(/are:\s*(.+)$/m);
|
|
95
|
+
if (archMatch) {
|
|
96
|
+
const architectures = archMatch[1].trim().split(/\s+/);
|
|
97
|
+
return {
|
|
98
|
+
isUniversal: architectures.length > 1,
|
|
99
|
+
architectures,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Single architecture
|
|
104
|
+
const singleArchMatch = stdout.match(/is architecture:\s*(\w+)/);
|
|
105
|
+
if (singleArchMatch) {
|
|
106
|
+
return {
|
|
107
|
+
isUniversal: false,
|
|
108
|
+
architectures: [singleArchMatch[1]],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return { isUniversal: false, architectures: [] };
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return { isUniversal: false, architectures: [] };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async getBinarySize(binaryPath) {
|
|
118
|
+
try {
|
|
119
|
+
const stat = await fs_1.promises.stat(binaryPath);
|
|
120
|
+
return stat.size;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return 0;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async scanForUniversalBinaries() {
|
|
127
|
+
const universalBinaries = [];
|
|
128
|
+
for (const appDir of APP_DIRECTORIES) {
|
|
129
|
+
if (!(await (0, fs_2.pathExists)(appDir))) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
(0, cli_1.printVerbose)(`Scanning ${appDir} for Universal Binaries...`);
|
|
133
|
+
try {
|
|
134
|
+
const entries = await fs_1.promises.readdir(appDir);
|
|
135
|
+
for (const entry of entries) {
|
|
136
|
+
if (!entry.endsWith(".app")) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const appPath = path_1.default.join(appDir, entry);
|
|
140
|
+
const executables = await this.findExecutablesInApp(appPath);
|
|
141
|
+
for (const execPath of executables) {
|
|
142
|
+
const { isUniversal, architectures } = await this.checkIfUniversal(execPath);
|
|
143
|
+
if (isUniversal && architectures.includes("arm64")) {
|
|
144
|
+
const totalSize = await this.getBinarySize(execPath);
|
|
145
|
+
// Estimate savings as roughly half the binary size (x86_64 portion)
|
|
146
|
+
const x86Archs = architectures.filter((a) => a.includes("x86") || a.includes("i386"));
|
|
147
|
+
const potentialSavings = Math.round((totalSize * x86Archs.length) / architectures.length);
|
|
148
|
+
universalBinaries.push({
|
|
149
|
+
appPath,
|
|
150
|
+
appName: path_1.default.basename(appPath, ".app"),
|
|
151
|
+
binaryPath: execPath,
|
|
152
|
+
totalSize,
|
|
153
|
+
architectures,
|
|
154
|
+
potentialSavings,
|
|
155
|
+
});
|
|
156
|
+
(0, cli_1.printVerbose)(`Found Universal Binary: ${entry} (${architectures.join(", ")}) - potential savings: ${(potentialSavings / (1024 * 1024)).toFixed(1)} MB`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
(0, cli_1.printVerbose)(`Error scanning ${appDir}: ${error}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return universalBinaries;
|
|
166
|
+
}
|
|
167
|
+
async getCacheInfo() {
|
|
168
|
+
if (!(await this.isAvailable())) {
|
|
169
|
+
return {
|
|
170
|
+
name: this.name,
|
|
171
|
+
type: this.type,
|
|
172
|
+
description: this.description,
|
|
173
|
+
paths: [],
|
|
174
|
+
isInstalled: false,
|
|
175
|
+
size: 0,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
(0, cli_1.printVerbose)("Scanning for Universal Binaries on Apple Silicon...");
|
|
179
|
+
this.universalBinaries = await this.scanForUniversalBinaries();
|
|
180
|
+
const totalSavings = this.universalBinaries.reduce((sum, b) => sum + b.potentialSavings, 0);
|
|
181
|
+
(0, cli_1.printVerbose)(`Found ${this.universalBinaries.length} Universal Binaries`);
|
|
182
|
+
(0, cli_1.printVerbose)(`Total potential savings: ${(totalSavings / (1024 * 1024)).toFixed(1)} MB`);
|
|
183
|
+
return {
|
|
184
|
+
name: this.name,
|
|
185
|
+
type: this.type,
|
|
186
|
+
description: this.description,
|
|
187
|
+
paths: this.universalBinaries.map((b) => b.binaryPath),
|
|
188
|
+
isInstalled: true,
|
|
189
|
+
size: totalSavings, // Report potential savings as "cache size"
|
|
190
|
+
categories: await this.getCacheCategories(),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
async getCacheCategories() {
|
|
194
|
+
if (this.universalBinaries.length === 0) {
|
|
195
|
+
this.universalBinaries = await this.scanForUniversalBinaries();
|
|
196
|
+
}
|
|
197
|
+
// Group by application for user-friendly selection
|
|
198
|
+
return this.universalBinaries.map((binary) => ({
|
|
199
|
+
id: `universal-${binary.appName.toLowerCase().replace(/\s+/g, "-")}`,
|
|
200
|
+
name: binary.appName,
|
|
201
|
+
description: `Universal Binary: ${binary.architectures.join(", ")} - ${(binary.potentialSavings / (1024 * 1024)).toFixed(1)} MB potential savings`,
|
|
202
|
+
paths: [binary.binaryPath],
|
|
203
|
+
size: binary.potentialSavings,
|
|
204
|
+
priority: "low", // Thinning is optional optimization
|
|
205
|
+
useCase: "archived", // x86_64 code is legacy on Apple Silicon
|
|
206
|
+
isProjectSpecific: false,
|
|
207
|
+
}));
|
|
208
|
+
}
|
|
209
|
+
async clear(dryRun = false, criteria, cacheInfo) {
|
|
210
|
+
const info = cacheInfo || (await this.getCacheInfo());
|
|
211
|
+
if (!info.isInstalled) {
|
|
212
|
+
return {
|
|
213
|
+
name: this.name,
|
|
214
|
+
success: false,
|
|
215
|
+
error: "Universal Binary cleaner requires macOS on Apple Silicon (arm64)",
|
|
216
|
+
clearedPaths: [],
|
|
217
|
+
sizeBefore: 0,
|
|
218
|
+
sizeAfter: 0,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
// Filter binaries based on criteria
|
|
222
|
+
let binariesToThin = this.universalBinaries;
|
|
223
|
+
if (criteria?.categories && criteria.categories.length > 0) {
|
|
224
|
+
binariesToThin = binariesToThin.filter((b) => {
|
|
225
|
+
const categoryId = `universal-${b.appName.toLowerCase().replace(/\s+/g, "-")}`;
|
|
226
|
+
return criteria.categories.includes(categoryId);
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
if (binariesToThin.length === 0) {
|
|
230
|
+
return {
|
|
231
|
+
name: this.name,
|
|
232
|
+
success: true,
|
|
233
|
+
clearedPaths: [],
|
|
234
|
+
sizeBefore: 0,
|
|
235
|
+
sizeAfter: 0,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
const sizeBefore = binariesToThin.reduce((sum, b) => sum + b.totalSize, 0);
|
|
239
|
+
if (dryRun) {
|
|
240
|
+
(0, cli_1.printVerbose)(`[DRY RUN] Would thin ${binariesToThin.length} Universal Binaries:`);
|
|
241
|
+
for (const binary of binariesToThin) {
|
|
242
|
+
(0, cli_1.printVerbose)(` • ${binary.appName}: ${binary.architectures.join(", ")} → arm64 only`);
|
|
243
|
+
(0, cli_1.printVerbose)(` Potential savings: ${(binary.potentialSavings / (1024 * 1024)).toFixed(1)} MB`);
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
name: this.name,
|
|
247
|
+
success: true,
|
|
248
|
+
sizeBefore,
|
|
249
|
+
sizeAfter: sizeBefore,
|
|
250
|
+
clearedPaths: binariesToThin.map((b) => b.binaryPath),
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
const clearedPaths = [];
|
|
254
|
+
let totalFreed = 0;
|
|
255
|
+
let error;
|
|
256
|
+
for (const binary of binariesToThin) {
|
|
257
|
+
try {
|
|
258
|
+
(0, cli_1.printVerbose)(`Thinning ${binary.appName}...`);
|
|
259
|
+
// Create backup first (optional safety measure)
|
|
260
|
+
const backupPath = `${binary.binaryPath}.universal.bak`;
|
|
261
|
+
// Thin the binary to arm64 only
|
|
262
|
+
// Note: This requires proper permissions and may need sudo for system apps
|
|
263
|
+
const tempPath = `${binary.binaryPath}.thin`;
|
|
264
|
+
try {
|
|
265
|
+
// Extract arm64 slice to temp file
|
|
266
|
+
await execAsync(`lipo -thin arm64 "${binary.binaryPath}" -output "${tempPath}"`);
|
|
267
|
+
// Backup original
|
|
268
|
+
await fs_1.promises.rename(binary.binaryPath, backupPath);
|
|
269
|
+
// Move thinned version
|
|
270
|
+
await fs_1.promises.rename(tempPath, binary.binaryPath);
|
|
271
|
+
// Preserve permissions
|
|
272
|
+
await execAsync(`chmod +x "${binary.binaryPath}"`);
|
|
273
|
+
// Remove backup on success
|
|
274
|
+
await fs_1.promises.unlink(backupPath);
|
|
275
|
+
clearedPaths.push(binary.binaryPath);
|
|
276
|
+
totalFreed += binary.potentialSavings;
|
|
277
|
+
(0, cli_1.printVerbose)(`✓ Thinned ${binary.appName}: saved ${(binary.potentialSavings / (1024 * 1024)).toFixed(1)} MB`);
|
|
278
|
+
}
|
|
279
|
+
catch (thinError) {
|
|
280
|
+
// Restore backup if it exists
|
|
281
|
+
if (await (0, fs_2.pathExists)(backupPath)) {
|
|
282
|
+
try {
|
|
283
|
+
await fs_1.promises.rename(backupPath, binary.binaryPath);
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
// Backup restore failed
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
throw thinError;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
catch (err) {
|
|
293
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
294
|
+
(0, cli_1.printVerbose)(`Failed to thin ${binary.appName}: ${errMsg}`);
|
|
295
|
+
if (!error) {
|
|
296
|
+
error = `Some binaries could not be thinned (may require elevated permissions): ${errMsg}`;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
name: this.name,
|
|
302
|
+
success: clearedPaths.length > 0,
|
|
303
|
+
sizeBefore,
|
|
304
|
+
sizeAfter: sizeBefore - totalFreed,
|
|
305
|
+
error,
|
|
306
|
+
clearedPaths,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
async clearByCategory(categoryIds, dryRun = false) {
|
|
310
|
+
return this.clear(dryRun, { categories: categoryIds });
|
|
311
|
+
}
|
|
312
|
+
static create() {
|
|
313
|
+
return new UniversalBinaryCleaner();
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
exports.UniversalBinaryCleaner = UniversalBinaryCleaner;
|
|
317
|
+
exports.default = UniversalBinaryCleaner.create();
|
|
318
|
+
//# sourceMappingURL=universalBinary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"universalBinary.js","sourceRoot":"","sources":["../../src/cleaners/universalBinary.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ export declare class VSCodeCleaner implements CleanerModule {
|
|
|
4
4
|
type: "ide";
|
|
5
5
|
description: string;
|
|
6
6
|
private getCachePaths;
|
|
7
|
+
private discoverAdditionalVSCodeCaches;
|
|
7
8
|
isAvailable(): Promise<boolean>;
|
|
8
9
|
getCacheInfo(): Promise<CacheInfo>;
|
|
9
10
|
clear(dryRun?: boolean, _criteria?: CacheSelectionCriteria, cacheInfo?: CacheInfo): Promise<ClearResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vscode.d.ts","sourceRoot":"","sources":["../../src/cleaners/vscode.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,sBAAsB,EACvB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"vscode.d.ts","sourceRoot":"","sources":["../../src/cleaners/vscode.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAoBlB,qBAAa,aAAc,YAAW,aAAa;IACjD,IAAI,SAAY;IAChB,IAAI,EAAG,KAAK,CAAU;IACtB,WAAW,SACgE;IAE3E,OAAO,CAAC,aAAa;YA0IP,8BAA8B;IAyCtC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IA8D/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IA0ElC,KAAK,CACT,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,sBAAsB,EAClC,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,WAAW,CAAC;IA2JvB,MAAM,CAAC,MAAM,IAAI,aAAa;CAG/B;;AAED,wBAAsC"}
|