squeaky-clean 0.1.11 → 0.3.0

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 (249) hide show
  1. package/dist/cleaners/BaseCleaner.d.ts +57 -0
  2. package/dist/cleaners/BaseCleaner.d.ts.map +1 -0
  3. package/dist/cleaners/BaseCleaner.js +299 -0
  4. package/dist/cleaners/BaseCleaner.js.map +1 -0
  5. package/dist/cleaners/CleanerRegistry.d.ts +65 -0
  6. package/dist/cleaners/CleanerRegistry.d.ts.map +1 -0
  7. package/dist/cleaners/CleanerRegistry.js +112 -0
  8. package/dist/cleaners/CleanerRegistry.js.map +1 -0
  9. package/dist/cleaners/androidstudio.d.ts +16 -0
  10. package/dist/cleaners/androidstudio.d.ts.map +1 -0
  11. package/dist/cleaners/androidstudio.js +375 -0
  12. package/dist/cleaners/androidstudio.js.map +1 -0
  13. package/dist/cleaners/brew.d.ts +4 -0
  14. package/dist/cleaners/brew.d.ts.map +1 -0
  15. package/dist/cleaners/brew.js +197 -0
  16. package/dist/cleaners/brew.js.map +1 -0
  17. package/dist/cleaners/brewEnhanced.d.ts +18 -0
  18. package/dist/cleaners/brewEnhanced.d.ts.map +1 -0
  19. package/dist/cleaners/brewEnhanced.js +255 -0
  20. package/dist/cleaners/brewEnhanced.js.map +1 -0
  21. package/dist/cleaners/bun.d.ts +14 -0
  22. package/dist/cleaners/bun.d.ts.map +1 -0
  23. package/dist/cleaners/bun.js +207 -0
  24. package/dist/cleaners/bun.js.map +1 -0
  25. package/dist/cleaners/cargo.d.ts +15 -0
  26. package/dist/cleaners/cargo.d.ts.map +1 -0
  27. package/dist/cleaners/cargo.js +193 -0
  28. package/dist/cleaners/cargo.js.map +1 -0
  29. package/dist/cleaners/chrome.d.ts +14 -0
  30. package/dist/cleaners/chrome.d.ts.map +1 -0
  31. package/dist/cleaners/chrome.js +250 -0
  32. package/dist/cleaners/chrome.js.map +1 -0
  33. package/dist/cleaners/cocoapods.d.ts +16 -0
  34. package/dist/cleaners/cocoapods.d.ts.map +1 -0
  35. package/dist/cleaners/cocoapods.js +180 -0
  36. package/dist/cleaners/cocoapods.js.map +1 -0
  37. package/dist/cleaners/cursor.d.ts +15 -0
  38. package/dist/cleaners/cursor.d.ts.map +1 -0
  39. package/dist/cleaners/cursor.js +377 -0
  40. package/dist/cleaners/cursor.js.map +1 -0
  41. package/dist/cleaners/docker.d.ts +35 -0
  42. package/dist/cleaners/docker.d.ts.map +1 -0
  43. package/dist/cleaners/docker.js +288 -0
  44. package/dist/cleaners/docker.js.map +1 -0
  45. package/dist/cleaners/firefox.d.ts +15 -0
  46. package/dist/cleaners/firefox.d.ts.map +1 -0
  47. package/dist/cleaners/firefox.js +281 -0
  48. package/dist/cleaners/firefox.js.map +1 -0
  49. package/dist/cleaners/flutter.d.ts +18 -0
  50. package/dist/cleaners/flutter.d.ts.map +1 -0
  51. package/dist/cleaners/flutter.js +354 -0
  52. package/dist/cleaners/flutter.js.map +1 -0
  53. package/dist/cleaners/goBuild.d.ts +18 -0
  54. package/dist/cleaners/goBuild.d.ts.map +1 -0
  55. package/dist/cleaners/goBuild.js +196 -0
  56. package/dist/cleaners/goBuild.js.map +1 -0
  57. package/dist/cleaners/gradle.d.ts +14 -0
  58. package/dist/cleaners/gradle.d.ts.map +1 -0
  59. package/dist/cleaners/gradle.js +336 -0
  60. package/dist/cleaners/gradle.js.map +1 -0
  61. package/dist/cleaners/index.d.ts +51 -0
  62. package/dist/cleaners/index.d.ts.map +1 -0
  63. package/dist/cleaners/index.js +267 -0
  64. package/dist/cleaners/index.js.map +1 -0
  65. package/dist/cleaners/jetbrains.d.ts +18 -0
  66. package/dist/cleaners/jetbrains.d.ts.map +1 -0
  67. package/dist/cleaners/jetbrains.js +441 -0
  68. package/dist/cleaners/jetbrains.js.map +1 -0
  69. package/dist/cleaners/maven.d.ts +15 -0
  70. package/dist/cleaners/maven.d.ts.map +1 -0
  71. package/dist/cleaners/maven.js +182 -0
  72. package/dist/cleaners/maven.js.map +1 -0
  73. package/dist/cleaners/nix.d.ts +4 -0
  74. package/dist/cleaners/nix.d.ts.map +1 -0
  75. package/dist/cleaners/nix.js +227 -0
  76. package/dist/cleaners/nix.js.map +1 -0
  77. package/dist/cleaners/nodeGyp.d.ts +14 -0
  78. package/dist/cleaners/nodeGyp.d.ts.map +1 -0
  79. package/dist/cleaners/nodeGyp.js +157 -0
  80. package/dist/cleaners/nodeGyp.js.map +1 -0
  81. package/dist/cleaners/npm.d.ts +14 -0
  82. package/dist/cleaners/npm.d.ts.map +1 -0
  83. package/dist/cleaners/npm.js +203 -0
  84. package/dist/cleaners/npm.js.map +1 -0
  85. package/dist/cleaners/npmEnhanced.d.ts +19 -0
  86. package/dist/cleaners/npmEnhanced.d.ts.map +1 -0
  87. package/dist/cleaners/npmEnhanced.js +336 -0
  88. package/dist/cleaners/npmEnhanced.js.map +1 -0
  89. package/dist/cleaners/nuget.d.ts +16 -0
  90. package/dist/cleaners/nuget.d.ts.map +1 -0
  91. package/dist/cleaners/nuget.js +197 -0
  92. package/dist/cleaners/nuget.js.map +1 -0
  93. package/dist/cleaners/nx.d.ts +18 -0
  94. package/dist/cleaners/nx.d.ts.map +1 -0
  95. package/dist/cleaners/nx.js +308 -0
  96. package/dist/cleaners/nx.js.map +1 -0
  97. package/dist/cleaners/pip.d.ts +19 -0
  98. package/dist/cleaners/pip.d.ts.map +1 -0
  99. package/dist/cleaners/pip.js +334 -0
  100. package/dist/cleaners/pip.js.map +1 -0
  101. package/dist/cleaners/pipenv.d.ts +16 -0
  102. package/dist/cleaners/pipenv.d.ts.map +1 -0
  103. package/dist/cleaners/pipenv.js +184 -0
  104. package/dist/cleaners/pipenv.js.map +1 -0
  105. package/dist/cleaners/playwright.d.ts +15 -0
  106. package/dist/cleaners/playwright.d.ts.map +1 -0
  107. package/dist/cleaners/playwright.js +221 -0
  108. package/dist/cleaners/playwright.js.map +1 -0
  109. package/dist/cleaners/pnpm.d.ts +14 -0
  110. package/dist/cleaners/pnpm.d.ts.map +1 -0
  111. package/dist/cleaners/pnpm.js +214 -0
  112. package/dist/cleaners/pnpm.js.map +1 -0
  113. package/dist/cleaners/poetry.d.ts +16 -0
  114. package/dist/cleaners/poetry.d.ts.map +1 -0
  115. package/dist/cleaners/poetry.js +184 -0
  116. package/dist/cleaners/poetry.js.map +1 -0
  117. package/dist/cleaners/swiftpm.d.ts +16 -0
  118. package/dist/cleaners/swiftpm.d.ts.map +1 -0
  119. package/dist/cleaners/swiftpm.js +179 -0
  120. package/dist/cleaners/swiftpm.js.map +1 -0
  121. package/dist/cleaners/turbo.d.ts +18 -0
  122. package/dist/cleaners/turbo.d.ts.map +1 -0
  123. package/dist/cleaners/turbo.js +325 -0
  124. package/dist/cleaners/turbo.js.map +1 -0
  125. package/dist/cleaners/universalBinary.d.ts +20 -0
  126. package/dist/cleaners/universalBinary.d.ts.map +1 -0
  127. package/dist/cleaners/universalBinary.js +318 -0
  128. package/dist/cleaners/universalBinary.js.map +1 -0
  129. package/dist/cleaners/vite.d.ts +17 -0
  130. package/dist/cleaners/vite.d.ts.map +1 -0
  131. package/dist/cleaners/vite.js +274 -0
  132. package/dist/cleaners/vite.js.map +1 -0
  133. package/dist/cleaners/vscode.d.ts +15 -0
  134. package/dist/cleaners/vscode.d.ts.map +1 -0
  135. package/dist/cleaners/vscode.js +411 -0
  136. package/dist/cleaners/vscode.js.map +1 -0
  137. package/dist/cleaners/webpack.d.ts +17 -0
  138. package/dist/cleaners/webpack.d.ts.map +1 -0
  139. package/dist/cleaners/webpack.js +263 -0
  140. package/dist/cleaners/webpack.js.map +1 -0
  141. package/dist/cleaners/windsurf.d.ts +15 -0
  142. package/dist/cleaners/windsurf.d.ts.map +1 -0
  143. package/dist/cleaners/windsurf.js +366 -0
  144. package/dist/cleaners/windsurf.js.map +1 -0
  145. package/dist/cleaners/xcode.d.ts +14 -0
  146. package/dist/cleaners/xcode.d.ts.map +1 -0
  147. package/dist/cleaners/xcode.js +348 -0
  148. package/dist/cleaners/xcode.js.map +1 -0
  149. package/dist/cleaners/yarn.d.ts +16 -0
  150. package/dist/cleaners/yarn.d.ts.map +1 -0
  151. package/dist/cleaners/yarn.js +271 -0
  152. package/dist/cleaners/yarn.js.map +1 -0
  153. package/dist/cleaners/zed.d.ts +15 -0
  154. package/dist/cleaners/zed.d.ts.map +1 -0
  155. package/dist/cleaners/zed.js +383 -0
  156. package/dist/cleaners/zed.js.map +1 -0
  157. package/dist/cli.d.ts +3 -0
  158. package/dist/cli.d.ts.map +1 -0
  159. package/dist/cli.js +373 -0
  160. package/dist/cli.js.map +1 -0
  161. package/dist/commands/auto.d.ts +8 -0
  162. package/dist/commands/auto.d.ts.map +1 -0
  163. package/dist/commands/auto.js +251 -0
  164. package/dist/commands/auto.js.map +1 -0
  165. package/dist/commands/categories.d.ts +8 -0
  166. package/dist/commands/categories.d.ts.map +1 -0
  167. package/dist/commands/categories.js +133 -0
  168. package/dist/commands/categories.js.map +1 -0
  169. package/dist/commands/clean.d.ts +3 -0
  170. package/dist/commands/clean.d.ts.map +1 -0
  171. package/dist/commands/clean.js +149 -0
  172. package/dist/commands/clean.js.map +1 -0
  173. package/dist/commands/config.d.ts +14 -0
  174. package/dist/commands/config.d.ts.map +1 -0
  175. package/dist/commands/config.js +458 -0
  176. package/dist/commands/config.js.map +1 -0
  177. package/dist/commands/configDoctor.d.ts +26 -0
  178. package/dist/commands/configDoctor.d.ts.map +1 -0
  179. package/dist/commands/configDoctor.js +60 -0
  180. package/dist/commands/configDoctor.js.map +1 -0
  181. package/dist/commands/doctor.d.ts +2 -0
  182. package/dist/commands/doctor.d.ts.map +1 -0
  183. package/dist/commands/doctor.js +141 -0
  184. package/dist/commands/doctor.js.map +1 -0
  185. package/dist/commands/emojis.d.ts +2 -0
  186. package/dist/commands/emojis.d.ts.map +1 -0
  187. package/dist/commands/emojis.js +28 -0
  188. package/dist/commands/emojis.js.map +1 -0
  189. package/dist/commands/interactive.d.ts +3 -0
  190. package/dist/commands/interactive.d.ts.map +1 -0
  191. package/dist/commands/interactive.js +284 -0
  192. package/dist/commands/interactive.js.map +1 -0
  193. package/dist/commands/interactiveEnhanced.d.ts +4 -0
  194. package/dist/commands/interactiveEnhanced.d.ts.map +1 -0
  195. package/dist/commands/interactiveEnhanced.js +460 -0
  196. package/dist/commands/interactiveEnhanced.js.map +1 -0
  197. package/dist/commands/list.d.ts +2 -0
  198. package/dist/commands/list.d.ts.map +1 -0
  199. package/dist/commands/list.js +68 -0
  200. package/dist/commands/list.js.map +1 -0
  201. package/dist/commands/sizes.d.ts +2 -0
  202. package/dist/commands/sizes.d.ts.map +1 -0
  203. package/dist/commands/sizes.js +87 -0
  204. package/dist/commands/sizes.js.map +1 -0
  205. package/dist/commands/ub.d.ts +10 -0
  206. package/dist/commands/ub.d.ts.map +1 -0
  207. package/dist/commands/ub.js +170 -0
  208. package/dist/commands/ub.js.map +1 -0
  209. package/dist/config/configSchema.d.ts +93 -0
  210. package/dist/config/configSchema.d.ts.map +1 -0
  211. package/dist/config/configSchema.js +88 -0
  212. package/dist/config/configSchema.js.map +1 -0
  213. package/dist/config/index.d.ts +35 -0
  214. package/dist/config/index.d.ts.map +1 -0
  215. package/dist/config/index.js +258 -0
  216. package/dist/config/index.js.map +1 -0
  217. package/dist/config/loadConfig.d.ts +7 -0
  218. package/dist/config/loadConfig.d.ts.map +1 -0
  219. package/dist/config/loadConfig.js +95 -0
  220. package/dist/config/loadConfig.js.map +1 -0
  221. package/dist/config/migrateConfig.d.ts +56 -0
  222. package/dist/config/migrateConfig.d.ts.map +1 -0
  223. package/dist/config/migrateConfig.js +102 -0
  224. package/dist/config/migrateConfig.js.map +1 -0
  225. package/dist/plugins/discovery.d.ts +6 -0
  226. package/dist/plugins/discovery.d.ts.map +1 -0
  227. package/dist/plugins/discovery.js +64 -0
  228. package/dist/plugins/discovery.js.map +1 -0
  229. package/dist/profiles/index.d.ts +61 -0
  230. package/dist/profiles/index.d.ts.map +1 -0
  231. package/dist/profiles/index.js +406 -0
  232. package/dist/profiles/index.js.map +1 -0
  233. package/dist/types/index.d.ts +176 -0
  234. package/dist/types/index.d.ts.map +1 -0
  235. package/dist/types/index.js +3 -0
  236. package/dist/types/index.js.map +1 -0
  237. package/dist/utils/cache.d.ts +58 -0
  238. package/dist/utils/cache.d.ts.map +1 -0
  239. package/dist/utils/cache.js +101 -0
  240. package/dist/utils/cache.js.map +1 -0
  241. package/dist/utils/cli.d.ts +45 -0
  242. package/dist/utils/cli.d.ts.map +1 -0
  243. package/dist/utils/cli.js +412 -0
  244. package/dist/utils/cli.js.map +1 -0
  245. package/dist/utils/fs.d.ts +32 -0
  246. package/dist/utils/fs.d.ts.map +1 -0
  247. package/dist/utils/fs.js +250 -0
  248. package/dist/utils/fs.js.map +1 -0
  249. package/package.json +7 -7
@@ -0,0 +1,263 @@
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.WebpackCleaner = 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 WebpackCleaner {
43
+ constructor() {
44
+ this.name = "webpack";
45
+ this.type = "build-tool";
46
+ this.description = "Webpack build caches and temporary files";
47
+ }
48
+ async findWebpackCaches() {
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
+ // Also check for global webpack caches
61
+ const globalCachePaths = [
62
+ path.join(homeDir, ".webpack"),
63
+ path.join(homeDir, ".cache", "webpack"),
64
+ path.join(homeDir, "node_modules", ".cache", "webpack"),
65
+ ];
66
+ for (const globalPath of globalCachePaths) {
67
+ if (await (0, fs_2.pathExists)(globalPath)) {
68
+ caches.push(globalPath);
69
+ }
70
+ }
71
+ // Search for project-specific webpack caches
72
+ for (const searchDir of searchDirs) {
73
+ if (await (0, fs_2.pathExists)(searchDir)) {
74
+ try {
75
+ const projectCaches = await this.findWebpackCachesRecursively(searchDir, 3);
76
+ caches.push(...projectCaches);
77
+ }
78
+ catch (error) {
79
+ (0, cli_1.printVerbose)(`Error searching ${searchDir}: ${error}`);
80
+ }
81
+ }
82
+ }
83
+ return [...new Set(caches)]; // Remove duplicates
84
+ }
85
+ async findWebpackCachesRecursively(dir, maxDepth) {
86
+ if (maxDepth <= 0)
87
+ return [];
88
+ const webpackCaches = [];
89
+ try {
90
+ const entries = await fs_1.promises.readdir(dir, { withFileTypes: true });
91
+ for (const entry of entries) {
92
+ if (entry.isDirectory() &&
93
+ !entry.name.startsWith(".") &&
94
+ entry.name !== "node_modules") {
95
+ const fullPath = path.join(dir, entry.name);
96
+ // Check for webpack cache directories
97
+ const cacheLocations = [
98
+ path.join(fullPath, "node_modules", ".cache", "webpack"),
99
+ path.join(fullPath, ".webpack-cache"),
100
+ path.join(fullPath, "webpack-cache"),
101
+ path.join(fullPath, ".cache", "webpack"),
102
+ ];
103
+ for (const cacheLocation of cacheLocations) {
104
+ if (await (0, fs_2.pathExists)(cacheLocation)) {
105
+ webpackCaches.push(cacheLocation);
106
+ }
107
+ }
108
+ // Recursively search subdirectories
109
+ const subCaches = await this.findWebpackCachesRecursively(fullPath, maxDepth - 1);
110
+ webpackCaches.push(...subCaches);
111
+ }
112
+ }
113
+ }
114
+ catch {
115
+ // Ignore permission errors or other issues
116
+ }
117
+ return webpackCaches;
118
+ }
119
+ async hasWebpackProjects() {
120
+ const homeDir = os.homedir();
121
+ // Check current directory first
122
+ const currentDirPackageJson = path.join(process.cwd(), "package.json");
123
+ if (await this.isWebpackProject(currentDirPackageJson)) {
124
+ return true;
125
+ }
126
+ // Search common project directories
127
+ const searchDirs = [
128
+ path.join(homeDir, "Projects"),
129
+ path.join(homeDir, "Development"),
130
+ path.join(homeDir, "dev"),
131
+ path.join(homeDir, "workspace"),
132
+ ];
133
+ for (const searchDir of searchDirs) {
134
+ if (await (0, fs_2.pathExists)(searchDir)) {
135
+ try {
136
+ const hasWebpack = await this.searchForWebpackProjects(searchDir, 2);
137
+ if (hasWebpack)
138
+ return true;
139
+ }
140
+ catch {
141
+ // Continue searching
142
+ }
143
+ }
144
+ }
145
+ return false;
146
+ }
147
+ async searchForWebpackProjects(dir, maxDepth) {
148
+ if (maxDepth <= 0)
149
+ return false;
150
+ try {
151
+ const entries = await fs_1.promises.readdir(dir, { withFileTypes: true });
152
+ for (const entry of entries) {
153
+ if (entry.isDirectory() && !entry.name.startsWith(".")) {
154
+ const fullPath = path.join(dir, entry.name);
155
+ const packageJsonPath = path.join(fullPath, "package.json");
156
+ if (await this.isWebpackProject(packageJsonPath)) {
157
+ return true;
158
+ }
159
+ // Recursively search
160
+ if (await this.searchForWebpackProjects(fullPath, maxDepth - 1)) {
161
+ return true;
162
+ }
163
+ }
164
+ }
165
+ }
166
+ catch {
167
+ // Ignore errors
168
+ }
169
+ return false;
170
+ }
171
+ async isWebpackProject(packageJsonPath) {
172
+ try {
173
+ if (!(await (0, fs_2.pathExists)(packageJsonPath)))
174
+ return false;
175
+ const content = await fs_1.promises.readFile(packageJsonPath, "utf-8");
176
+ const packageJson = JSON.parse(content);
177
+ // Check for webpack in dependencies or devDependencies
178
+ const deps = {
179
+ ...packageJson.dependencies,
180
+ ...packageJson.devDependencies,
181
+ };
182
+ return "webpack" in deps || "webpack-cli" in deps;
183
+ }
184
+ catch {
185
+ return false;
186
+ }
187
+ }
188
+ async isAvailable() {
189
+ // Check if webpack caches exist or if there are webpack projects
190
+ const caches = await this.findWebpackCaches();
191
+ const hasProjects = await this.hasWebpackProjects();
192
+ return caches.length > 0 || hasProjects;
193
+ }
194
+ async getCacheInfo() {
195
+ const cachePaths = await this.findWebpackCaches();
196
+ let totalSize = 0;
197
+ const validPaths = [];
198
+ for (const cachePath of cachePaths) {
199
+ try {
200
+ const size = await (0, fs_2.getDirectorySize)(cachePath);
201
+ totalSize += size;
202
+ validPaths.push(cachePath);
203
+ (0, cli_1.printVerbose)(`${cli_1.symbols.folder} ${cachePath}: ${(size / (1024 * 1024)).toFixed(1)} MB`);
204
+ }
205
+ catch (error) {
206
+ (0, cli_1.printVerbose)(`Error calculating size for ${cachePath}: ${error}`);
207
+ }
208
+ }
209
+ return {
210
+ name: this.name,
211
+ type: this.type,
212
+ description: this.description,
213
+ paths: validPaths,
214
+ isInstalled: await this.isAvailable(),
215
+ size: totalSize,
216
+ };
217
+ }
218
+ async clear(dryRun = false, _criteria, cacheInfo) {
219
+ const info = cacheInfo || (await this.getCacheInfo());
220
+ if (!info.isInstalled) {
221
+ return {
222
+ name: this.name,
223
+ success: false,
224
+ error: "No webpack caches found",
225
+ clearedPaths: [],
226
+ sizeBefore: 0,
227
+ sizeAfter: 0,
228
+ };
229
+ }
230
+ const sizeBefore = info.size || 0;
231
+ const clearedPaths = [];
232
+ let errors = [];
233
+ for (const cachePath of info.paths) {
234
+ try {
235
+ if (dryRun) {
236
+ (0, cli_1.printVerbose)(`${cli_1.symbols.soap} Would clear: ${cachePath}`);
237
+ clearedPaths.push(cachePath);
238
+ }
239
+ else {
240
+ (0, cli_1.printVerbose)(`${cli_1.symbols.soap} Clearing: ${cachePath}`);
241
+ await (0, fs_2.safeRmrf)(cachePath);
242
+ clearedPaths.push(cachePath);
243
+ }
244
+ }
245
+ catch (error) {
246
+ const errorMsg = `Failed to clear ${cachePath}: ${error}`;
247
+ errors.push(errorMsg);
248
+ (0, cli_1.printVerbose)(errorMsg);
249
+ }
250
+ }
251
+ return {
252
+ name: this.name,
253
+ success: errors.length === 0,
254
+ sizeBefore,
255
+ sizeAfter: 0, // Set to 0 as we don't want to rescan
256
+ error: errors.length > 0 ? errors.join("; ") : undefined,
257
+ clearedPaths,
258
+ };
259
+ }
260
+ }
261
+ exports.WebpackCleaner = WebpackCleaner;
262
+ exports.default = new WebpackCleaner();
263
+ //# sourceMappingURL=webpack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webpack.js","sourceRoot":"","sources":["../../src/cleaners/webpack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,2BAAoC;AACpC,2CAA6B;AAC7B,uCAAyB;AACzB,oCAAqE;AACrE,sCAAqD;AAErD,MAAa,cAAc;IAA3B;QACE,SAAI,GAAG,SAAS,CAAC;QACjB,SAAI,GAAG,YAAqB,CAAC;QAC7B,gBAAW,GAAG,0CAA0C,CAAC;IAmQ3D,CAAC;IAjQS,KAAK,CAAC,iBAAiB;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAE7B,uCAAuC;QACvC,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;YAC/B,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB;SACpC,CAAC;QAEF,uCAAuC;QACvC,MAAM,gBAAgB,GAAG;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,CAAC;SACxD,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,gBAAgB,EAAE,CAAC;YAC1C,IAAI,MAAM,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,MAAM,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAC3D,SAAS,EACT,CAAC,CACF,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;gBAChC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAA,kBAAY,EAAC,mBAAmB,SAAS,KAAK,KAAK,EAAE,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,oBAAoB;IACnD,CAAC;IAEO,KAAK,CAAC,4BAA4B,CACxC,GAAW,EACX,QAAgB;QAEhB,IAAI,QAAQ,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IACE,KAAK,CAAC,WAAW,EAAE;oBACnB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAC3B,KAAK,CAAC,IAAI,KAAK,cAAc,EAC7B,CAAC;oBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAE5C,sCAAsC;oBACtC,MAAM,cAAc,GAAG;wBACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,CAAC;wBACxD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC;wBACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC;wBACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC;qBACzC,CAAC;oBAEF,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;wBAC3C,IAAI,MAAM,IAAA,eAAU,EAAC,aAAa,CAAC,EAAE,CAAC;4BACpC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBACpC,CAAC;oBACH,CAAC;oBAED,oCAAoC;oBACpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,4BAA4B,CACvD,QAAQ,EACR,QAAQ,GAAG,CAAC,CACb,CAAC;oBACF,aAAa,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAE7B,gCAAgC;QAChC,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QACvE,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oCAAoC;QACpC,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;SAChC,CAAC;QAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,MAAM,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBACrE,IAAI,UAAU;wBAAE,OAAO,IAAI,CAAC;gBAC9B,CAAC;gBAAC,MAAM,CAAC;oBACP,qBAAqB;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACpC,GAAW,EACX,QAAgB;QAEhB,IAAI,QAAQ,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAEhC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;oBAE5D,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE,CAAC;wBACjD,OAAO,IAAI,CAAC;oBACd,CAAC;oBAED,qBAAqB;oBACrB,IAAI,MAAM,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;wBAChE,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,eAAuB;QACpD,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,IAAA,eAAU,EAAC,eAAe,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAEvD,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAExC,uDAAuD;YACvD,MAAM,IAAI,GAAG;gBACX,GAAG,WAAW,CAAC,YAAY;gBAC3B,GAAG,WAAW,CAAC,eAAe;aAC/B,CAAC;YACF,OAAO,SAAS,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QACf,iEAAiE;QACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEpD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAClD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAgB,EAAC,SAAS,CAAC,CAAC;gBAC/C,SAAS,IAAI,IAAI,CAAC;gBAClB,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC3B,IAAA,kBAAY,EACV,GAAG,aAAO,CAAC,MAAM,IAAI,SAAS,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC1E,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAA,kBAAY,EAAC,8BAA8B,SAAS,KAAK,KAAK,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE;YACrC,IAAI,EAAE,SAAS;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CACT,MAAM,GAAG,KAAK,EACd,SAAkC,EAClC,SAAqB;QAErB,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,yBAAyB;gBAChC,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,CAAC;gBACb,SAAS,EAAE,CAAC;aACb,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAClC,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,IAAI,MAAM,GAAa,EAAE,CAAC;QAE1B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,IAAI,MAAM,EAAE,CAAC;oBACX,IAAA,kBAAY,EAAC,GAAG,aAAO,CAAC,IAAI,iBAAiB,SAAS,EAAE,CAAC,CAAC;oBAC1D,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,IAAA,kBAAY,EAAC,GAAG,aAAO,CAAC,IAAI,cAAc,SAAS,EAAE,CAAC,CAAC;oBACvD,MAAM,IAAA,aAAQ,EAAC,SAAS,CAAC,CAAC;oBAC1B,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,mBAAmB,SAAS,KAAK,KAAK,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,IAAA,kBAAY,EAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,UAAU;YACV,SAAS,EAAE,CAAC,EAAE,sCAAsC;YACpD,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YACxD,YAAY;SACb,CAAC;IACJ,CAAC;CACF;AAtQD,wCAsQC;AAED,kBAAe,IAAI,cAAc,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { CacheInfo, ClearResult, CleanerModule, CacheCategory, CacheSelectionCriteria } from "../types";
2
+ export declare class WindsurfCleaner implements CleanerModule {
3
+ name: string;
4
+ type: "ide";
5
+ description: string;
6
+ private getCachePaths;
7
+ isAvailable(): Promise<boolean>;
8
+ getCacheInfo(): Promise<CacheInfo>;
9
+ getCacheCategories(): Promise<CacheCategory[]>;
10
+ clear(dryRun?: boolean, _criteria?: CacheSelectionCriteria, _cacheInfo?: CacheInfo, protectedPaths?: string[]): Promise<ClearResult>;
11
+ clearByCategory(categoryIds: string[], dryRun?: boolean, _cacheInfo?: CacheInfo, protectedPaths?: string[]): Promise<ClearResult>;
12
+ }
13
+ declare const _default: WindsurfCleaner;
14
+ export default _default;
15
+ //# sourceMappingURL=windsurf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../src/cleaners/windsurf.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,aAAa,EACb,sBAAsB,EACvB,MAAM,UAAU,CAAC;AASlB,qBAAa,eAAgB,YAAW,aAAa;IACnD,IAAI,SAAc;IAClB,IAAI,EAAG,KAAK,CAAU;IACtB,WAAW,SAC+E;IAE1F,OAAO,CAAC,aAAa;IAkOf,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IA6B/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IA4BlC,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IA6C9C,KAAK,CACT,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,sBAAsB,EAClC,UAAU,CAAC,EAAE,SAAS,EACtB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,WAAW,CAAC;IAqDjB,eAAe,CACnB,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,UAAQ,EACd,UAAU,CAAC,EAAE,SAAS,EACtB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,WAAW,CAAC;CA+CxB;;AAED,wBAAqC"}
@@ -0,0 +1,366 @@
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.WindsurfCleaner = 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 WindsurfCleaner {
13
+ constructor() {
14
+ this.name = "windsurf";
15
+ this.type = "ide";
16
+ this.description = "Windsurf IDE (Codeium) extensions cache, workspace storage, logs, and temporary files";
17
+ }
18
+ getCachePaths() {
19
+ const homeDir = os_1.default.homedir();
20
+ const platform = process.platform;
21
+ const paths = [];
22
+ if (platform === "darwin") {
23
+ // macOS Windsurf paths
24
+ const windsurfDir = path_1.default.join(homeDir, ".windsurf");
25
+ const windsurfCacheDir = path_1.default.join(homeDir, "Library", "Caches", "com.exafunction.windsurf");
26
+ const windsurfAppSupport = path_1.default.join(homeDir, "Library", "Application Support", "Windsurf");
27
+ paths.push(
28
+ // Cache directories (safe to clear)
29
+ {
30
+ path: windsurfCacheDir,
31
+ description: "Windsurf application cache",
32
+ category: "cache",
33
+ priority: "low",
34
+ safeToDelete: true,
35
+ }, {
36
+ path: path_1.default.join(homeDir, "Library", "Caches", "com.exafunction.windsurf.ShipIt"),
37
+ description: "Windsurf update cache",
38
+ category: "updates",
39
+ priority: "low",
40
+ safeToDelete: true,
41
+ },
42
+ // Logs (safe to clear)
43
+ {
44
+ path: path_1.default.join(windsurfAppSupport, "logs"),
45
+ description: "Windsurf application logs",
46
+ category: "logs",
47
+ priority: "low",
48
+ safeToDelete: true,
49
+ },
50
+ // Extension caches
51
+ {
52
+ path: path_1.default.join(windsurfDir, "extensions", ".obsolete"),
53
+ description: "Obsolete extension files",
54
+ category: "extensions",
55
+ priority: "low",
56
+ safeToDelete: true,
57
+ }, {
58
+ path: path_1.default.join(windsurfAppSupport, "CachedExtensions"),
59
+ description: "Cached extension metadata",
60
+ category: "extensions",
61
+ priority: "normal",
62
+ safeToDelete: true,
63
+ }, {
64
+ path: path_1.default.join(windsurfAppSupport, "CachedExtensionVSIXs"),
65
+ description: "Cached extension VSIX files",
66
+ category: "extensions",
67
+ priority: "normal",
68
+ safeToDelete: true,
69
+ },
70
+ // Workspace storage (generally safe but may lose some state)
71
+ {
72
+ path: path_1.default.join(windsurfAppSupport, "User", "workspaceStorage"),
73
+ description: "Workspace-specific cache and state",
74
+ category: "workspaces",
75
+ priority: "normal",
76
+ safeToDelete: true,
77
+ }, {
78
+ path: path_1.default.join(windsurfAppSupport, "User", "History"),
79
+ description: "File history and timeline cache",
80
+ category: "history",
81
+ priority: "normal",
82
+ safeToDelete: true,
83
+ },
84
+ // Crash dumps
85
+ {
86
+ path: path_1.default.join(windsurfAppSupport, "CrashDumps"),
87
+ description: "Application crash dumps",
88
+ category: "diagnostics",
89
+ priority: "low",
90
+ safeToDelete: true,
91
+ },
92
+ // Extension global storage (be careful - may contain important data)
93
+ {
94
+ path: path_1.default.join(windsurfAppSupport, "User", "globalStorage"),
95
+ description: "Extension global storage (some safe to clear)",
96
+ category: "storage",
97
+ priority: "important",
98
+ safeToDelete: false,
99
+ });
100
+ }
101
+ else if (platform === "win32") {
102
+ // Windows Windsurf paths
103
+ const appData = process.env.APPDATA || path_1.default.join(homeDir, "AppData", "Roaming");
104
+ const localAppData = process.env.LOCALAPPDATA || path_1.default.join(homeDir, "AppData", "Local");
105
+ const windsurfDir = path_1.default.join(homeDir, ".windsurf");
106
+ paths.push({
107
+ path: path_1.default.join(localAppData, "Windsurf", "Cache"),
108
+ description: "Windsurf application cache",
109
+ category: "cache",
110
+ priority: "low",
111
+ safeToDelete: true,
112
+ }, {
113
+ path: path_1.default.join(appData, "Windsurf", "logs"),
114
+ description: "Windsurf application logs",
115
+ category: "logs",
116
+ priority: "low",
117
+ safeToDelete: true,
118
+ }, {
119
+ path: path_1.default.join(windsurfDir, "extensions", ".obsolete"),
120
+ description: "Obsolete extension files",
121
+ category: "extensions",
122
+ priority: "low",
123
+ safeToDelete: true,
124
+ }, {
125
+ path: path_1.default.join(appData, "Windsurf", "CachedExtensions"),
126
+ description: "Cached extension metadata",
127
+ category: "extensions",
128
+ priority: "normal",
129
+ safeToDelete: true,
130
+ }, {
131
+ path: path_1.default.join(appData, "Windsurf", "User", "workspaceStorage"),
132
+ description: "Workspace-specific cache and state",
133
+ category: "workspaces",
134
+ priority: "normal",
135
+ safeToDelete: true,
136
+ }, {
137
+ path: path_1.default.join(appData, "Windsurf", "CrashDumps"),
138
+ description: "Application crash dumps",
139
+ category: "diagnostics",
140
+ priority: "low",
141
+ safeToDelete: true,
142
+ });
143
+ }
144
+ else {
145
+ // Linux Windsurf paths
146
+ const configDir = process.env.XDG_CONFIG_HOME || path_1.default.join(homeDir, ".config");
147
+ const cacheDir = process.env.XDG_CACHE_HOME || path_1.default.join(homeDir, ".cache");
148
+ const windsurfDir = path_1.default.join(homeDir, ".windsurf");
149
+ paths.push({
150
+ path: path_1.default.join(cacheDir, "windsurf"),
151
+ description: "Windsurf application cache",
152
+ category: "cache",
153
+ priority: "low",
154
+ safeToDelete: true,
155
+ }, {
156
+ path: path_1.default.join(configDir, "Windsurf", "logs"),
157
+ description: "Windsurf application logs",
158
+ category: "logs",
159
+ priority: "low",
160
+ safeToDelete: true,
161
+ }, {
162
+ path: path_1.default.join(windsurfDir, "extensions", ".obsolete"),
163
+ description: "Obsolete extension files",
164
+ category: "extensions",
165
+ priority: "low",
166
+ safeToDelete: true,
167
+ }, {
168
+ path: path_1.default.join(configDir, "Windsurf", "CachedExtensions"),
169
+ description: "Cached extension metadata",
170
+ category: "extensions",
171
+ priority: "normal",
172
+ safeToDelete: true,
173
+ }, {
174
+ path: path_1.default.join(configDir, "Windsurf", "User", "workspaceStorage"),
175
+ description: "Workspace-specific cache and state",
176
+ category: "workspaces",
177
+ priority: "normal",
178
+ safeToDelete: true,
179
+ }, {
180
+ path: path_1.default.join(configDir, "Windsurf", "CrashDumps"),
181
+ description: "Application crash dumps",
182
+ category: "diagnostics",
183
+ priority: "low",
184
+ safeToDelete: true,
185
+ });
186
+ }
187
+ return paths;
188
+ }
189
+ async isAvailable() {
190
+ const homeDir = os_1.default.homedir();
191
+ const platform = process.platform;
192
+ // Check for .windsurf directory (extensions)
193
+ const windsurfDir = path_1.default.join(homeDir, ".windsurf");
194
+ if (await (0, fs_2.pathExists)(windsurfDir)) {
195
+ return true;
196
+ }
197
+ // Check for cache directories
198
+ const cachePaths = this.getCachePaths();
199
+ for (const { path: cachePath } of cachePaths) {
200
+ if (await (0, fs_2.pathExists)(cachePath)) {
201
+ return true;
202
+ }
203
+ }
204
+ // Check for application
205
+ if (platform === "darwin") {
206
+ const appPath = "/Applications/Windsurf.app";
207
+ if (await (0, fs_2.pathExists)(appPath)) {
208
+ return true;
209
+ }
210
+ }
211
+ return false;
212
+ }
213
+ async getCacheInfo() {
214
+ const cachePaths = this.getCachePaths();
215
+ const existingPaths = [];
216
+ let totalSize = 0;
217
+ for (const { path: cachePath, safeToDelete } of cachePaths) {
218
+ if (!safeToDelete)
219
+ continue; // Only count safe-to-delete paths
220
+ if (await (0, fs_2.pathExists)(cachePath)) {
221
+ existingPaths.push(cachePath);
222
+ const size = await (0, fs_2.getEstimatedDirectorySize)(cachePath);
223
+ totalSize += size;
224
+ (0, cli_1.printVerbose)(` 🔍 📁 ${cachePath}: ${(size / (1024 * 1024)).toFixed(1)} MB`);
225
+ }
226
+ }
227
+ return {
228
+ name: this.name,
229
+ type: this.type,
230
+ description: this.description,
231
+ paths: existingPaths,
232
+ isInstalled: await this.isAvailable(),
233
+ size: totalSize,
234
+ };
235
+ }
236
+ async getCacheCategories() {
237
+ const cachePaths = this.getCachePaths();
238
+ const categoryMap = new Map();
239
+ for (const { path: cachePath, description, category, priority, safeToDelete, } of cachePaths) {
240
+ if (!safeToDelete)
241
+ continue;
242
+ if (!(await (0, fs_2.pathExists)(cachePath)))
243
+ continue;
244
+ const size = await (0, fs_2.getDirectorySize)(cachePath);
245
+ let stats;
246
+ try {
247
+ stats = await fs_1.promises.stat(cachePath);
248
+ }
249
+ catch {
250
+ stats = null;
251
+ }
252
+ const categoryId = `windsurf-${category}`;
253
+ const existing = categoryMap.get(categoryId);
254
+ if (existing) {
255
+ existing.paths.push(cachePath);
256
+ existing.size = (existing.size || 0) + size;
257
+ }
258
+ else {
259
+ categoryMap.set(categoryId, {
260
+ id: categoryId,
261
+ name: `Windsurf ${category}`,
262
+ description,
263
+ paths: [cachePath],
264
+ size,
265
+ lastModified: stats?.mtime,
266
+ priority,
267
+ useCase: "development",
268
+ });
269
+ }
270
+ }
271
+ return Array.from(categoryMap.values());
272
+ }
273
+ async clear(dryRun = false, _criteria, _cacheInfo, protectedPaths) {
274
+ const cachePaths = this.getCachePaths();
275
+ const clearedPaths = [];
276
+ let sizeBefore = 0;
277
+ let sizeAfter = 0;
278
+ for (const { path: cachePath, description, safeToDelete } of cachePaths) {
279
+ if (!safeToDelete)
280
+ continue; // Only clear safe paths by default
281
+ if (!(await (0, fs_2.pathExists)(cachePath)))
282
+ continue;
283
+ // Check if path is protected
284
+ if (protectedPaths?.some((p) => cachePath.startsWith(p))) {
285
+ (0, cli_1.printVerbose)(` Skipping protected path: ${cachePath}`);
286
+ continue;
287
+ }
288
+ const pathSize = await (0, fs_2.getDirectorySize)(cachePath);
289
+ sizeBefore += pathSize;
290
+ if (dryRun) {
291
+ (0, cli_1.printVerbose)(` [DRY RUN] Would clear: ${description} (${(pathSize / (1024 * 1024)).toFixed(1)} MB)`);
292
+ clearedPaths.push(cachePath);
293
+ }
294
+ else {
295
+ try {
296
+ await (0, fs_2.safeRmrf)(cachePath);
297
+ clearedPaths.push(cachePath);
298
+ (0, cli_1.printVerbose)(` ✓ Cleared: ${description}`);
299
+ }
300
+ catch (error) {
301
+ (0, cli_1.printVerbose)(` ✗ Failed to clear ${description}: ${error}`);
302
+ }
303
+ }
304
+ }
305
+ if (!dryRun) {
306
+ for (const { path: cachePath, safeToDelete } of cachePaths) {
307
+ if (!safeToDelete)
308
+ continue;
309
+ if (await (0, fs_2.pathExists)(cachePath)) {
310
+ sizeAfter += await (0, fs_2.getDirectorySize)(cachePath);
311
+ }
312
+ }
313
+ }
314
+ return {
315
+ name: this.name,
316
+ success: true,
317
+ sizeBefore,
318
+ sizeAfter: dryRun ? sizeBefore : sizeAfter,
319
+ clearedPaths,
320
+ };
321
+ }
322
+ async clearByCategory(categoryIds, dryRun = false, _cacheInfo, protectedPaths) {
323
+ const categories = await this.getCacheCategories();
324
+ const targetCategories = categories.filter((c) => categoryIds.includes(c.id));
325
+ const clearedPaths = [];
326
+ let sizeBefore = 0;
327
+ let sizeAfter = 0;
328
+ for (const category of targetCategories) {
329
+ for (const cachePath of category.paths) {
330
+ if (!(await (0, fs_2.pathExists)(cachePath)))
331
+ continue;
332
+ if (protectedPaths?.some((p) => cachePath.startsWith(p))) {
333
+ (0, cli_1.printVerbose)(` Skipping protected path: ${cachePath}`);
334
+ continue;
335
+ }
336
+ const pathSize = await (0, fs_2.getDirectorySize)(cachePath);
337
+ sizeBefore += pathSize;
338
+ if (dryRun) {
339
+ (0, cli_1.printVerbose)(` [DRY RUN] Would clear: ${category.name} (${(pathSize / (1024 * 1024)).toFixed(1)} MB)`);
340
+ clearedPaths.push(cachePath);
341
+ }
342
+ else {
343
+ try {
344
+ await (0, fs_2.safeRmrf)(cachePath);
345
+ clearedPaths.push(cachePath);
346
+ (0, cli_1.printVerbose)(` ✓ Cleared: ${category.name}`);
347
+ }
348
+ catch (error) {
349
+ (0, cli_1.printVerbose)(` ✗ Failed to clear ${category.name}: ${error}`);
350
+ }
351
+ }
352
+ }
353
+ }
354
+ return {
355
+ name: this.name,
356
+ success: true,
357
+ sizeBefore,
358
+ sizeAfter: dryRun ? sizeBefore : sizeAfter,
359
+ clearedPaths,
360
+ clearedCategories: categoryIds,
361
+ };
362
+ }
363
+ }
364
+ exports.WindsurfCleaner = WindsurfCleaner;
365
+ exports.default = new WindsurfCleaner();
366
+ //# sourceMappingURL=windsurf.js.map