squeaky-clean 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 (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +465 -0
  3. package/dist/cleaners/BaseCleaner.d.ts +57 -0
  4. package/dist/cleaners/BaseCleaner.d.ts.map +1 -0
  5. package/dist/cleaners/BaseCleaner.js +299 -0
  6. package/dist/cleaners/BaseCleaner.js.map +1 -0
  7. package/dist/cleaners/CleanerRegistry.d.ts +65 -0
  8. package/dist/cleaners/CleanerRegistry.d.ts.map +1 -0
  9. package/dist/cleaners/CleanerRegistry.js +112 -0
  10. package/dist/cleaners/CleanerRegistry.js.map +1 -0
  11. package/dist/cleaners/androidstudio.d.ts +16 -0
  12. package/dist/cleaners/androidstudio.d.ts.map +1 -0
  13. package/dist/cleaners/androidstudio.js +375 -0
  14. package/dist/cleaners/androidstudio.js.map +1 -0
  15. package/dist/cleaners/brew.d.ts +4 -0
  16. package/dist/cleaners/brew.d.ts.map +1 -0
  17. package/dist/cleaners/brew.js +197 -0
  18. package/dist/cleaners/brew.js.map +1 -0
  19. package/dist/cleaners/brewEnhanced.d.ts +18 -0
  20. package/dist/cleaners/brewEnhanced.d.ts.map +1 -0
  21. package/dist/cleaners/brewEnhanced.js +255 -0
  22. package/dist/cleaners/brewEnhanced.js.map +1 -0
  23. package/dist/cleaners/bun.d.ts +14 -0
  24. package/dist/cleaners/bun.d.ts.map +1 -0
  25. package/dist/cleaners/bun.js +207 -0
  26. package/dist/cleaners/bun.js.map +1 -0
  27. package/dist/cleaners/chrome.d.ts +14 -0
  28. package/dist/cleaners/chrome.d.ts.map +1 -0
  29. package/dist/cleaners/chrome.js +250 -0
  30. package/dist/cleaners/chrome.js.map +1 -0
  31. package/dist/cleaners/docker.d.ts +35 -0
  32. package/dist/cleaners/docker.d.ts.map +1 -0
  33. package/dist/cleaners/docker.js +285 -0
  34. package/dist/cleaners/docker.js.map +1 -0
  35. package/dist/cleaners/firefox.d.ts +15 -0
  36. package/dist/cleaners/firefox.d.ts.map +1 -0
  37. package/dist/cleaners/firefox.js +281 -0
  38. package/dist/cleaners/firefox.js.map +1 -0
  39. package/dist/cleaners/flutter.d.ts +18 -0
  40. package/dist/cleaners/flutter.d.ts.map +1 -0
  41. package/dist/cleaners/flutter.js +354 -0
  42. package/dist/cleaners/flutter.js.map +1 -0
  43. package/dist/cleaners/goBuild.d.ts +18 -0
  44. package/dist/cleaners/goBuild.d.ts.map +1 -0
  45. package/dist/cleaners/goBuild.js +196 -0
  46. package/dist/cleaners/goBuild.js.map +1 -0
  47. package/dist/cleaners/gradle.d.ts +14 -0
  48. package/dist/cleaners/gradle.d.ts.map +1 -0
  49. package/dist/cleaners/gradle.js +336 -0
  50. package/dist/cleaners/gradle.js.map +1 -0
  51. package/dist/cleaners/index.d.ts +51 -0
  52. package/dist/cleaners/index.d.ts.map +1 -0
  53. package/dist/cleaners/index.js +247 -0
  54. package/dist/cleaners/index.js.map +1 -0
  55. package/dist/cleaners/jetbrains.d.ts +18 -0
  56. package/dist/cleaners/jetbrains.d.ts.map +1 -0
  57. package/dist/cleaners/jetbrains.js +441 -0
  58. package/dist/cleaners/jetbrains.js.map +1 -0
  59. package/dist/cleaners/nix.d.ts +4 -0
  60. package/dist/cleaners/nix.d.ts.map +1 -0
  61. package/dist/cleaners/nix.js +227 -0
  62. package/dist/cleaners/nix.js.map +1 -0
  63. package/dist/cleaners/nodeGyp.d.ts +14 -0
  64. package/dist/cleaners/nodeGyp.d.ts.map +1 -0
  65. package/dist/cleaners/nodeGyp.js +157 -0
  66. package/dist/cleaners/nodeGyp.js.map +1 -0
  67. package/dist/cleaners/npm.d.ts +14 -0
  68. package/dist/cleaners/npm.d.ts.map +1 -0
  69. package/dist/cleaners/npm.js +198 -0
  70. package/dist/cleaners/npm.js.map +1 -0
  71. package/dist/cleaners/npmEnhanced.d.ts +19 -0
  72. package/dist/cleaners/npmEnhanced.d.ts.map +1 -0
  73. package/dist/cleaners/npmEnhanced.js +336 -0
  74. package/dist/cleaners/npmEnhanced.js.map +1 -0
  75. package/dist/cleaners/nx.d.ts +18 -0
  76. package/dist/cleaners/nx.d.ts.map +1 -0
  77. package/dist/cleaners/nx.js +308 -0
  78. package/dist/cleaners/nx.js.map +1 -0
  79. package/dist/cleaners/pip.d.ts +19 -0
  80. package/dist/cleaners/pip.d.ts.map +1 -0
  81. package/dist/cleaners/pip.js +334 -0
  82. package/dist/cleaners/pip.js.map +1 -0
  83. package/dist/cleaners/pnpm.d.ts +14 -0
  84. package/dist/cleaners/pnpm.d.ts.map +1 -0
  85. package/dist/cleaners/pnpm.js +209 -0
  86. package/dist/cleaners/pnpm.js.map +1 -0
  87. package/dist/cleaners/turbo.d.ts +18 -0
  88. package/dist/cleaners/turbo.d.ts.map +1 -0
  89. package/dist/cleaners/turbo.js +325 -0
  90. package/dist/cleaners/turbo.js.map +1 -0
  91. package/dist/cleaners/vite.d.ts +17 -0
  92. package/dist/cleaners/vite.d.ts.map +1 -0
  93. package/dist/cleaners/vite.js +274 -0
  94. package/dist/cleaners/vite.js.map +1 -0
  95. package/dist/cleaners/vscode.d.ts +14 -0
  96. package/dist/cleaners/vscode.d.ts.map +1 -0
  97. package/dist/cleaners/vscode.js +354 -0
  98. package/dist/cleaners/vscode.js.map +1 -0
  99. package/dist/cleaners/webpack.d.ts +17 -0
  100. package/dist/cleaners/webpack.d.ts.map +1 -0
  101. package/dist/cleaners/webpack.js +263 -0
  102. package/dist/cleaners/webpack.js.map +1 -0
  103. package/dist/cleaners/xcode.d.ts +14 -0
  104. package/dist/cleaners/xcode.d.ts.map +1 -0
  105. package/dist/cleaners/xcode.js +348 -0
  106. package/dist/cleaners/xcode.js.map +1 -0
  107. package/dist/cleaners/yarn.d.ts +16 -0
  108. package/dist/cleaners/yarn.d.ts.map +1 -0
  109. package/dist/cleaners/yarn.js +266 -0
  110. package/dist/cleaners/yarn.js.map +1 -0
  111. package/dist/cli.d.ts +3 -0
  112. package/dist/cli.d.ts.map +1 -0
  113. package/dist/cli.js +346 -0
  114. package/dist/cli.js.map +1 -0
  115. package/dist/commands/auto.d.ts +8 -0
  116. package/dist/commands/auto.d.ts.map +1 -0
  117. package/dist/commands/auto.js +224 -0
  118. package/dist/commands/auto.js.map +1 -0
  119. package/dist/commands/categories.d.ts +8 -0
  120. package/dist/commands/categories.d.ts.map +1 -0
  121. package/dist/commands/categories.js +133 -0
  122. package/dist/commands/categories.js.map +1 -0
  123. package/dist/commands/clean.d.ts +3 -0
  124. package/dist/commands/clean.d.ts.map +1 -0
  125. package/dist/commands/clean.js +149 -0
  126. package/dist/commands/clean.js.map +1 -0
  127. package/dist/commands/config.d.ts +14 -0
  128. package/dist/commands/config.d.ts.map +1 -0
  129. package/dist/commands/config.js +445 -0
  130. package/dist/commands/config.js.map +1 -0
  131. package/dist/commands/configDoctor.d.ts +26 -0
  132. package/dist/commands/configDoctor.d.ts.map +1 -0
  133. package/dist/commands/configDoctor.js +60 -0
  134. package/dist/commands/configDoctor.js.map +1 -0
  135. package/dist/commands/doctor.d.ts +2 -0
  136. package/dist/commands/doctor.d.ts.map +1 -0
  137. package/dist/commands/doctor.js +141 -0
  138. package/dist/commands/doctor.js.map +1 -0
  139. package/dist/commands/emojis.d.ts +2 -0
  140. package/dist/commands/emojis.d.ts.map +1 -0
  141. package/dist/commands/emojis.js +28 -0
  142. package/dist/commands/emojis.js.map +1 -0
  143. package/dist/commands/interactive.d.ts +3 -0
  144. package/dist/commands/interactive.d.ts.map +1 -0
  145. package/dist/commands/interactive.js +284 -0
  146. package/dist/commands/interactive.js.map +1 -0
  147. package/dist/commands/interactiveEnhanced.d.ts +4 -0
  148. package/dist/commands/interactiveEnhanced.d.ts.map +1 -0
  149. package/dist/commands/interactiveEnhanced.js +460 -0
  150. package/dist/commands/interactiveEnhanced.js.map +1 -0
  151. package/dist/commands/list.d.ts +2 -0
  152. package/dist/commands/list.d.ts.map +1 -0
  153. package/dist/commands/list.js +68 -0
  154. package/dist/commands/list.js.map +1 -0
  155. package/dist/commands/sizes.d.ts +2 -0
  156. package/dist/commands/sizes.d.ts.map +1 -0
  157. package/dist/commands/sizes.js +87 -0
  158. package/dist/commands/sizes.js.map +1 -0
  159. package/dist/config/index.d.ts +26 -0
  160. package/dist/config/index.d.ts.map +1 -0
  161. package/dist/config/index.js +228 -0
  162. package/dist/config/index.js.map +1 -0
  163. package/dist/config/loadConfig.d.ts +7 -0
  164. package/dist/config/loadConfig.d.ts.map +1 -0
  165. package/dist/config/loadConfig.js +103 -0
  166. package/dist/config/loadConfig.js.map +1 -0
  167. package/dist/config/migrateConfig.d.ts +56 -0
  168. package/dist/config/migrateConfig.d.ts.map +1 -0
  169. package/dist/config/migrateConfig.js +102 -0
  170. package/dist/config/migrateConfig.js.map +1 -0
  171. package/dist/plugins/discovery.d.ts +6 -0
  172. package/dist/plugins/discovery.d.ts.map +1 -0
  173. package/dist/plugins/discovery.js +64 -0
  174. package/dist/plugins/discovery.js.map +1 -0
  175. package/dist/profiles/index.d.ts +61 -0
  176. package/dist/profiles/index.d.ts.map +1 -0
  177. package/dist/profiles/index.js +361 -0
  178. package/dist/profiles/index.js.map +1 -0
  179. package/dist/types/index.d.ts +161 -0
  180. package/dist/types/index.d.ts.map +1 -0
  181. package/dist/types/index.js +3 -0
  182. package/dist/types/index.js.map +1 -0
  183. package/dist/utils/cli.d.ts +44 -0
  184. package/dist/utils/cli.d.ts.map +1 -0
  185. package/dist/utils/cli.js +407 -0
  186. package/dist/utils/cli.js.map +1 -0
  187. package/dist/utils/fs.d.ts +15 -0
  188. package/dist/utils/fs.d.ts.map +1 -0
  189. package/dist/utils/fs.js +218 -0
  190. package/dist/utils/fs.js.map +1 -0
  191. package/package.json +122 -0
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ViteCleaner = void 0;
37
+ const fs_1 = require("fs");
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const fs_2 = require("../utils/fs");
41
+ const cli_1 = require("../utils/cli");
42
+ class ViteCleaner {
43
+ constructor() {
44
+ this.name = "vite";
45
+ this.type = "build-tool";
46
+ this.description = "Vite build tool caches and temporary files";
47
+ }
48
+ async findViteCaches() {
49
+ const caches = [];
50
+ const homeDir = os.homedir();
51
+ // Common project directories to search
52
+ const searchDirs = [
53
+ path.join(homeDir, "Projects"),
54
+ path.join(homeDir, "Development"),
55
+ path.join(homeDir, "dev"),
56
+ path.join(homeDir, "workspace"),
57
+ path.join(homeDir, "Documents"),
58
+ process.cwd(), // Current directory
59
+ ];
60
+ // Search for project-specific vite caches
61
+ for (const searchDir of searchDirs) {
62
+ if (await (0, fs_2.pathExists)(searchDir)) {
63
+ try {
64
+ const projectCaches = await this.findViteCachesRecursively(searchDir, 3);
65
+ caches.push(...projectCaches);
66
+ }
67
+ catch (error) {
68
+ (0, cli_1.printVerbose)(`Error searching ${searchDir}: ${error}`);
69
+ }
70
+ }
71
+ }
72
+ return [...new Set(caches)]; // Remove duplicates
73
+ }
74
+ async findViteCachesRecursively(dir, maxDepth) {
75
+ if (maxDepth <= 0)
76
+ return [];
77
+ const viteCaches = [];
78
+ try {
79
+ const entries = await fs_1.promises.readdir(dir, { withFileTypes: true });
80
+ for (const entry of entries) {
81
+ if (entry.isDirectory() &&
82
+ !entry.name.startsWith(".") &&
83
+ entry.name !== "node_modules") {
84
+ const fullPath = path.join(dir, entry.name);
85
+ // Check for vite cache directories
86
+ const cacheLocations = [
87
+ path.join(fullPath, "node_modules", ".vite"),
88
+ path.join(fullPath, ".vite"),
89
+ path.join(fullPath, "dist"), // Vite output directory
90
+ ];
91
+ for (const cacheLocation of cacheLocations) {
92
+ if (await (0, fs_2.pathExists)(cacheLocation)) {
93
+ // For dist folders, only include if it's actually a vite project
94
+ if (cacheLocation.endsWith("dist")) {
95
+ const packageJsonPath = path.join(fullPath, "package.json");
96
+ if (await this.isViteProject(packageJsonPath)) {
97
+ viteCaches.push(cacheLocation);
98
+ }
99
+ }
100
+ else {
101
+ viteCaches.push(cacheLocation);
102
+ }
103
+ }
104
+ }
105
+ // Recursively search subdirectories
106
+ const subCaches = await this.findViteCachesRecursively(fullPath, maxDepth - 1);
107
+ viteCaches.push(...subCaches);
108
+ }
109
+ }
110
+ }
111
+ catch {
112
+ // Ignore permission errors or other issues
113
+ }
114
+ return viteCaches;
115
+ }
116
+ async hasViteProjects() {
117
+ const homeDir = os.homedir();
118
+ // Check current directory first
119
+ const currentDirPackageJson = path.join(process.cwd(), "package.json");
120
+ if (await this.isViteProject(currentDirPackageJson)) {
121
+ return true;
122
+ }
123
+ // Search common project directories
124
+ const searchDirs = [
125
+ path.join(homeDir, "Projects"),
126
+ path.join(homeDir, "Development"),
127
+ path.join(homeDir, "dev"),
128
+ path.join(homeDir, "workspace"),
129
+ ];
130
+ for (const searchDir of searchDirs) {
131
+ if (await (0, fs_2.pathExists)(searchDir)) {
132
+ try {
133
+ const hasVite = await this.searchForViteProjects(searchDir, 2);
134
+ if (hasVite)
135
+ return true;
136
+ }
137
+ catch {
138
+ // Continue searching
139
+ }
140
+ }
141
+ }
142
+ return false;
143
+ }
144
+ async searchForViteProjects(dir, maxDepth) {
145
+ if (maxDepth <= 0)
146
+ return false;
147
+ try {
148
+ const entries = await fs_1.promises.readdir(dir, { withFileTypes: true });
149
+ for (const entry of entries) {
150
+ if (entry.isDirectory() && !entry.name.startsWith(".")) {
151
+ const fullPath = path.join(dir, entry.name);
152
+ const packageJsonPath = path.join(fullPath, "package.json");
153
+ if (await this.isViteProject(packageJsonPath)) {
154
+ return true;
155
+ }
156
+ // Check for vite config files
157
+ const viteConfigFiles = [
158
+ "vite.config.js",
159
+ "vite.config.ts",
160
+ "vite.config.mjs",
161
+ "vite.config.cjs",
162
+ ];
163
+ for (const configFile of viteConfigFiles) {
164
+ if (await (0, fs_2.pathExists)(path.join(fullPath, configFile))) {
165
+ return true;
166
+ }
167
+ }
168
+ // Recursively search
169
+ if (await this.searchForViteProjects(fullPath, maxDepth - 1)) {
170
+ return true;
171
+ }
172
+ }
173
+ }
174
+ }
175
+ catch {
176
+ // Ignore errors
177
+ }
178
+ return false;
179
+ }
180
+ async isViteProject(packageJsonPath) {
181
+ try {
182
+ if (!(await (0, fs_2.pathExists)(packageJsonPath)))
183
+ return false;
184
+ const content = await fs_1.promises.readFile(packageJsonPath, "utf-8");
185
+ const packageJson = JSON.parse(content);
186
+ // Check for vite in dependencies or devDependencies
187
+ const deps = {
188
+ ...packageJson.dependencies,
189
+ ...packageJson.devDependencies,
190
+ };
191
+ return ("vite" in deps ||
192
+ "@vitejs/plugin-react" in deps ||
193
+ "@vitejs/plugin-vue" in deps);
194
+ }
195
+ catch {
196
+ return false;
197
+ }
198
+ }
199
+ async isAvailable() {
200
+ // Check if vite caches exist or if there are vite projects
201
+ const caches = await this.findViteCaches();
202
+ const hasProjects = await this.hasViteProjects();
203
+ return caches.length > 0 || hasProjects;
204
+ }
205
+ async getCacheInfo() {
206
+ const cachePaths = await this.findViteCaches();
207
+ let totalSize = 0;
208
+ const validPaths = [];
209
+ for (const cachePath of cachePaths) {
210
+ try {
211
+ const size = await (0, fs_2.getDirectorySize)(cachePath);
212
+ totalSize += size;
213
+ validPaths.push(cachePath);
214
+ (0, cli_1.printVerbose)(`${cli_1.symbols.folder} ${cachePath}: ${(size / (1024 * 1024)).toFixed(1)} MB`);
215
+ }
216
+ catch (error) {
217
+ (0, cli_1.printVerbose)(`Error calculating size for ${cachePath}: ${error}`);
218
+ }
219
+ }
220
+ return {
221
+ name: this.name,
222
+ type: this.type,
223
+ description: this.description,
224
+ paths: validPaths,
225
+ isInstalled: await this.isAvailable(),
226
+ size: totalSize,
227
+ };
228
+ }
229
+ async clear(dryRun = false, _criteria, cacheInfo) {
230
+ const info = cacheInfo || (await this.getCacheInfo());
231
+ if (!info.isInstalled) {
232
+ return {
233
+ name: this.name,
234
+ success: false,
235
+ error: "No Vite caches found",
236
+ clearedPaths: [],
237
+ sizeBefore: 0,
238
+ sizeAfter: 0,
239
+ };
240
+ }
241
+ const sizeBefore = info.size || 0;
242
+ const clearedPaths = [];
243
+ let errors = [];
244
+ for (const cachePath of info.paths) {
245
+ try {
246
+ if (dryRun) {
247
+ (0, cli_1.printVerbose)(`${cli_1.symbols.soap} Would clear: ${cachePath}`);
248
+ clearedPaths.push(cachePath);
249
+ }
250
+ else {
251
+ (0, cli_1.printVerbose)(`${cli_1.symbols.soap} Clearing: ${cachePath}`);
252
+ await (0, fs_2.safeRmrf)(cachePath);
253
+ clearedPaths.push(cachePath);
254
+ }
255
+ }
256
+ catch (error) {
257
+ const errorMsg = `Failed to clear ${cachePath}: ${error}`;
258
+ errors.push(errorMsg);
259
+ (0, cli_1.printVerbose)(errorMsg);
260
+ }
261
+ }
262
+ return {
263
+ name: this.name,
264
+ success: errors.length === 0,
265
+ sizeBefore,
266
+ sizeAfter: 0, // Set to 0 as we don't want to rescan
267
+ error: errors.length > 0 ? errors.join("; ") : undefined,
268
+ clearedPaths,
269
+ };
270
+ }
271
+ }
272
+ exports.ViteCleaner = ViteCleaner;
273
+ exports.default = new ViteCleaner();
274
+ //# sourceMappingURL=vite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.js","sourceRoot":"","sources":["../../src/cleaners/vite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { CacheInfo, ClearResult, CleanerModule, CacheSelectionCriteria } from "../types";
2
+ export declare class VSCodeCleaner implements CleanerModule {
3
+ name: string;
4
+ type: "ide";
5
+ description: string;
6
+ private getCachePaths;
7
+ isAvailable(): Promise<boolean>;
8
+ getCacheInfo(): Promise<CacheInfo>;
9
+ clear(dryRun?: boolean, _criteria?: CacheSelectionCriteria, cacheInfo?: CacheInfo): Promise<ClearResult>;
10
+ static create(): VSCodeCleaner;
11
+ }
12
+ declare const _default: VSCodeCleaner;
13
+ export default _default;
14
+ //# sourceMappingURL=vscode.d.ts.map
@@ -0,0 +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;AASlB,qBAAa,aAAc,YAAW,aAAa;IACjD,IAAI,SAAY;IAChB,IAAI,EAAG,KAAK,CAAU;IACtB,WAAW,SACgE;IAE3E,OAAO,CAAC,aAAa;IA4Hf,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IA8D/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAoElC,KAAK,CACT,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,sBAAsB,EAClC,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,WAAW,CAAC;IAwJvB,MAAM,CAAC,MAAM,IAAI,aAAa;CAG/B;;AAED,wBAAsC"}
@@ -0,0 +1,354 @@
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.VSCodeCleaner = void 0;
7
+ const fs_1 = require("fs");
8
+ const path_1 = __importDefault(require("path"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const fs_2 = require("../utils/fs");
11
+ const cli_1 = require("../utils/cli");
12
+ class VSCodeCleaner {
13
+ constructor() {
14
+ this.name = "vscode";
15
+ this.type = "ide";
16
+ this.description = "VS Code extensions cache, workspace storage, logs, and temporary files";
17
+ }
18
+ getCachePaths() {
19
+ const homeDir = os_1.default.homedir();
20
+ const platform = process.platform;
21
+ let vscodeConfigDir;
22
+ let vscodeExtensionsDir;
23
+ if (platform === "darwin") {
24
+ vscodeConfigDir = path_1.default.join(homeDir, "Library", "Application Support", "Code");
25
+ vscodeExtensionsDir = path_1.default.join(homeDir, ".vscode", "extensions");
26
+ }
27
+ else if (platform === "win32") {
28
+ vscodeConfigDir = path_1.default.join(homeDir, "AppData", "Roaming", "Code");
29
+ vscodeExtensionsDir = path_1.default.join(homeDir, ".vscode", "extensions");
30
+ }
31
+ else {
32
+ vscodeConfigDir = path_1.default.join(homeDir, ".config", "Code");
33
+ vscodeExtensionsDir = path_1.default.join(homeDir, ".vscode", "extensions");
34
+ }
35
+ return [
36
+ // Extension host cache and logs
37
+ {
38
+ path: path_1.default.join(vscodeConfigDir, "logs"),
39
+ description: "VS Code application logs",
40
+ category: "Logs",
41
+ },
42
+ {
43
+ path: path_1.default.join(vscodeConfigDir, "CachedExtensions"),
44
+ description: "Cached extension metadata",
45
+ category: "Extensions",
46
+ },
47
+ {
48
+ path: path_1.default.join(vscodeConfigDir, "CachedExtensionVSIXs"),
49
+ description: "Cached extension VSIX files",
50
+ category: "Extensions",
51
+ },
52
+ // Workspace storage and state
53
+ {
54
+ path: path_1.default.join(vscodeConfigDir, "User", "workspaceStorage"),
55
+ description: "Workspace-specific cache and state",
56
+ category: "Workspaces",
57
+ },
58
+ {
59
+ path: path_1.default.join(vscodeConfigDir, "User", "History"),
60
+ description: "File history and timeline cache",
61
+ category: "History",
62
+ },
63
+ // Language server and IntelliSense caches
64
+ {
65
+ path: path_1.default.join(vscodeConfigDir, "User", "globalStorage"),
66
+ description: "Extension global storage (some safe to clear)",
67
+ category: "Storage",
68
+ },
69
+ // Crash dumps and diagnostic data
70
+ {
71
+ path: path_1.default.join(vscodeConfigDir, "CrashDumps"),
72
+ description: "Application crash dumps",
73
+ category: "Diagnostics",
74
+ },
75
+ // Extension-specific caches in extensions folder
76
+ {
77
+ path: path_1.default.join(vscodeExtensionsDir, ".obsolete"),
78
+ description: "Obsolete extension files",
79
+ category: "Extensions",
80
+ },
81
+ // Platform-specific additional locations
82
+ ...(platform === "darwin"
83
+ ? [
84
+ {
85
+ path: path_1.default.join(homeDir, "Library", "Caches", "com.microsoft.VSCode"),
86
+ description: "macOS VS Code application cache",
87
+ category: "App Cache",
88
+ },
89
+ {
90
+ path: path_1.default.join(homeDir, "Library", "Logs", "Microsoft VS Code"),
91
+ description: "macOS VS Code system logs",
92
+ category: "Logs",
93
+ },
94
+ ]
95
+ : []),
96
+ ...(platform === "win32"
97
+ ? [
98
+ {
99
+ path: path_1.default.join(homeDir, "AppData", "Local", "Microsoft", "vscode-cpptools"),
100
+ description: "C++ extension cache",
101
+ category: "Language Servers",
102
+ },
103
+ ]
104
+ : []),
105
+ // Common language server caches (cross-platform)
106
+ {
107
+ path: path_1.default.join(homeDir, ".vscode-server", "data", "logs"),
108
+ description: "Remote development server logs",
109
+ category: "Remote",
110
+ },
111
+ ];
112
+ }
113
+ async isAvailable() {
114
+ try {
115
+ (0, cli_1.printVerbose)("Checking if VS Code is installed...");
116
+ const platform = process.platform;
117
+ const vscodeInstalls = [
118
+ // macOS
119
+ "/Applications/Visual Studio Code.app",
120
+ "/Applications/Visual Studio Code - Insiders.app",
121
+ // Windows
122
+ path_1.default.join(process.env.PROGRAMFILES || "", "Microsoft VS Code", "Code.exe"),
123
+ path_1.default.join(process.env.LOCALAPPDATA || "", "Programs", "Microsoft VS Code", "Code.exe"),
124
+ // Linux
125
+ "/usr/bin/code",
126
+ "/snap/code/current/usr/share/code/code",
127
+ "/usr/share/code/code",
128
+ ];
129
+ for (const install of vscodeInstalls) {
130
+ if (await (0, fs_2.pathExists)(install)) {
131
+ (0, cli_1.printVerbose)(`Found VS Code at ${install}`);
132
+ return true;
133
+ }
134
+ }
135
+ // Also check if we have VS Code config directories (indicates usage)
136
+ const homeDir = os_1.default.homedir();
137
+ let configDir;
138
+ if (platform === "darwin") {
139
+ configDir = path_1.default.join(homeDir, "Library", "Application Support", "Code");
140
+ }
141
+ else if (platform === "win32") {
142
+ configDir = path_1.default.join(homeDir, "AppData", "Roaming", "Code");
143
+ }
144
+ else {
145
+ configDir = path_1.default.join(homeDir, ".config", "Code");
146
+ }
147
+ if (await (0, fs_2.pathExists)(configDir)) {
148
+ (0, cli_1.printVerbose)(`Found VS Code config directory at ${configDir}`);
149
+ return true;
150
+ }
151
+ return false;
152
+ }
153
+ catch {
154
+ return false;
155
+ }
156
+ }
157
+ async getCacheInfo() {
158
+ const allPaths = this.getCachePaths();
159
+ const existingPaths = [];
160
+ let totalSize = 0;
161
+ let lastModified;
162
+ const categories = new Map();
163
+ (0, cli_1.printVerbose)(`Checking ${allPaths.length} VS Code cache locations...`);
164
+ for (const { path: cachePath, description, category } of allPaths) {
165
+ if (await (0, fs_2.pathExists)(cachePath)) {
166
+ existingPaths.push(cachePath);
167
+ try {
168
+ // Use estimation for potentially large directories to avoid timeouts
169
+ const isLargeDirectory = category === "Storage" ||
170
+ category === "Workspaces" ||
171
+ cachePath.includes("extensions");
172
+ const size = isLargeDirectory
173
+ ? await (0, fs_2.getEstimatedDirectorySize)(cachePath)
174
+ : await (0, fs_2.getDirectorySize)(cachePath);
175
+ totalSize += size;
176
+ // Track by category
177
+ const existing = categories.get(category) || { size: 0, count: 0 };
178
+ categories.set(category, {
179
+ size: existing.size + size,
180
+ count: existing.count + 1,
181
+ });
182
+ const stats = await fs_1.promises.stat(cachePath);
183
+ if (!lastModified || stats.mtime > lastModified) {
184
+ lastModified = stats.mtime;
185
+ }
186
+ const sizeInMB = (size / (1024 * 1024)).toFixed(1);
187
+ const sizeType = isLargeDirectory ? " estimated" : "";
188
+ (0, cli_1.printVerbose)(`Found ${category}: ${cachePath} (${sizeInMB} MB${sizeType}) - ${description}`);
189
+ }
190
+ catch (error) {
191
+ (0, cli_1.printVerbose)(`Error checking ${cachePath}: ${error}`);
192
+ }
193
+ }
194
+ }
195
+ // Log category summary
196
+ if (categories.size > 0) {
197
+ (0, cli_1.printVerbose)("=== VS Code Cache Summary by Category ===");
198
+ categories.forEach((info, category) => {
199
+ const sizeInMB = (info.size / (1024 * 1024)).toFixed(1);
200
+ (0, cli_1.printVerbose)(`${category}: ${info.count} locations, ${sizeInMB} MB`);
201
+ });
202
+ }
203
+ return {
204
+ name: this.name,
205
+ type: this.type,
206
+ description: this.description,
207
+ paths: existingPaths,
208
+ isInstalled: await this.isAvailable(),
209
+ size: totalSize,
210
+ lastModified,
211
+ };
212
+ }
213
+ async clear(dryRun = false, _criteria, cacheInfo) {
214
+ const info = cacheInfo || (await this.getCacheInfo());
215
+ const clearedPaths = [];
216
+ const sizeBefore = info.size || 0;
217
+ let success = true;
218
+ let error;
219
+ if (!info.isInstalled) {
220
+ return {
221
+ name: this.name,
222
+ success: false,
223
+ error: "VS Code is not installed or configured",
224
+ clearedPaths: [],
225
+ sizeBefore: 0,
226
+ sizeAfter: 0,
227
+ };
228
+ }
229
+ if (info.paths.length === 0) {
230
+ (0, cli_1.printVerbose)("No VS Code cache directories found");
231
+ return {
232
+ name: this.name,
233
+ success: true,
234
+ clearedPaths: [],
235
+ sizeBefore: 0,
236
+ sizeAfter: 0,
237
+ };
238
+ }
239
+ try {
240
+ if (dryRun) {
241
+ (0, cli_1.printVerbose)(`[DRY RUN] Would clear ${info.paths.length} VS Code cache locations:`);
242
+ const pathsWithInfo = this.getCachePaths();
243
+ for (const cachePath of info.paths) {
244
+ const pathInfo = pathsWithInfo.find((p) => p.path === cachePath);
245
+ (0, cli_1.printVerbose)(` • ${pathInfo?.category || "Unknown"}: ${cachePath}`);
246
+ if (pathInfo?.description) {
247
+ (0, cli_1.printVerbose)(` ${pathInfo.description}`);
248
+ }
249
+ }
250
+ return {
251
+ name: this.name,
252
+ success: true,
253
+ sizeBefore,
254
+ sizeAfter: sizeBefore,
255
+ clearedPaths: info.paths,
256
+ };
257
+ }
258
+ const pathsWithInfo = this.getCachePaths();
259
+ // Clear caches by category priority (safest first)
260
+ const priorityOrder = [
261
+ "Logs",
262
+ "Diagnostics",
263
+ "App Cache",
264
+ "Extensions",
265
+ "History",
266
+ "Language Servers",
267
+ "Remote",
268
+ "Workspaces", // More careful - contains workspace state
269
+ "Storage", // Most careful - contains extension settings
270
+ ];
271
+ const categorizedPaths = new Map();
272
+ for (const cachePath of info.paths) {
273
+ const pathInfo = pathsWithInfo.find((p) => p.path === cachePath);
274
+ const category = pathInfo?.category || "Other";
275
+ if (!categorizedPaths.has(category)) {
276
+ categorizedPaths.set(category, []);
277
+ }
278
+ categorizedPaths.get(category).push(cachePath);
279
+ }
280
+ // Clear in priority order
281
+ for (const category of priorityOrder) {
282
+ const paths = categorizedPaths.get(category);
283
+ if (!paths)
284
+ continue;
285
+ (0, cli_1.printVerbose)(`Clearing ${category} caches...`);
286
+ for (const cachePath of paths) {
287
+ try {
288
+ if (await (0, fs_2.pathExists)(cachePath)) {
289
+ const pathInfo = pathsWithInfo.find((p) => p.path === cachePath);
290
+ (0, cli_1.printVerbose)(`Clearing ${category}: ${cachePath}`);
291
+ if (pathInfo?.description) {
292
+ (0, cli_1.printVerbose)(` Purpose: ${pathInfo.description}`);
293
+ }
294
+ await (0, fs_2.safeRmrf)(cachePath);
295
+ clearedPaths.push(cachePath);
296
+ }
297
+ }
298
+ catch (pathError) {
299
+ (0, cli_1.printVerbose)(`Failed to clear ${cachePath}: ${pathError}`);
300
+ success = false;
301
+ if (!error) {
302
+ error = `Failed to clear some VS Code cache directories: ${pathError}`;
303
+ }
304
+ }
305
+ }
306
+ }
307
+ // Handle any remaining uncategorized paths
308
+ const remainingPaths = info.paths.filter((p) => !clearedPaths.includes(p));
309
+ for (const cachePath of remainingPaths) {
310
+ try {
311
+ if (await (0, fs_2.pathExists)(cachePath)) {
312
+ (0, cli_1.printVerbose)(`Clearing remaining cache: ${cachePath}`);
313
+ await (0, fs_2.safeRmrf)(cachePath);
314
+ clearedPaths.push(cachePath);
315
+ }
316
+ }
317
+ catch (pathError) {
318
+ (0, cli_1.printVerbose)(`Failed to clear ${cachePath}: ${pathError}`);
319
+ success = false;
320
+ if (!error) {
321
+ error = `Failed to clear some cache directories: ${pathError}`;
322
+ }
323
+ }
324
+ }
325
+ if (sizeBefore > 0) {
326
+ (0, cli_1.printVerbose)(`Freed space from VS Code cache data`);
327
+ }
328
+ return {
329
+ name: this.name,
330
+ success,
331
+ sizeBefore,
332
+ sizeAfter: 0, // Set to 0 as we don't want to rescan
333
+ error,
334
+ clearedPaths,
335
+ };
336
+ }
337
+ catch (clearError) {
338
+ return {
339
+ name: this.name,
340
+ success: false,
341
+ sizeBefore,
342
+ sizeAfter: sizeBefore,
343
+ error: clearError instanceof Error ? clearError.message : String(clearError),
344
+ clearedPaths,
345
+ };
346
+ }
347
+ }
348
+ static create() {
349
+ return new VSCodeCleaner();
350
+ }
351
+ }
352
+ exports.VSCodeCleaner = VSCodeCleaner;
353
+ exports.default = VSCodeCleaner.create();
354
+ //# sourceMappingURL=vscode.js.map