squeaky-clean 0.1.10 → 0.1.12

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 +367 -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 +460 -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 +75 -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 +255 -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 +4 -4
@@ -0,0 +1,57 @@
1
+ import { CleanerModule, CacheInfo, CacheCategory, ClearResult, CacheType, CacheSelectionCriteria } from "../types";
2
+ export declare abstract class BaseCleaner implements CleanerModule {
3
+ abstract name: string;
4
+ abstract type: CacheType;
5
+ abstract description: string;
6
+ abstract isAvailable(): Promise<boolean>;
7
+ abstract getCacheInfo(): Promise<CacheInfo>;
8
+ /**
9
+ * Get detailed cache categories with metadata
10
+ */
11
+ getCacheCategories(): Promise<CacheCategory[]>;
12
+ /**
13
+ * Check if a path is protected
14
+ */
15
+ protected isProtectedPath(path: string, protectedPaths?: string[]): boolean;
16
+ /**
17
+ * Filter paths to exclude protected ones
18
+ */
19
+ protected filterProtectedPaths(paths: string[], protectedPaths?: string[]): string[];
20
+ /**
21
+ * Clear cache with selection criteria
22
+ */
23
+ clear(dryRun?: boolean, criteria?: CacheSelectionCriteria, _cacheInfo?: CacheInfo, protectedPaths?: string[]): Promise<ClearResult>;
24
+ /**
25
+ * Clear specific categories
26
+ */
27
+ clearByCategory(categoryIds: string[], dryRun?: boolean, _cacheInfo?: CacheInfo, protectedPaths?: string[]): Promise<ClearResult>;
28
+ /**
29
+ * Filter categories based on criteria
30
+ */
31
+ protected filterCategories(categories: CacheCategory[], criteria?: CacheSelectionCriteria): CacheCategory[];
32
+ /**
33
+ * Get directory size in bytes
34
+ */
35
+ protected getDirectorySize(path: string): Promise<number>;
36
+ /**
37
+ * Clear a specific path
38
+ */
39
+ protected clearPath(path: string): Promise<void>;
40
+ /**
41
+ * Detect if a path has been recently used
42
+ */
43
+ protected isRecentlyUsed(path: string, days?: number): boolean;
44
+ /**
45
+ * Detect if a path is project-specific
46
+ */
47
+ protected isProjectSpecific(path: string): boolean;
48
+ /**
49
+ * Get cache priority based on path and usage
50
+ */
51
+ protected getCachePriority(path: string): "critical" | "important" | "normal" | "low";
52
+ /**
53
+ * Detect use case based on path patterns
54
+ */
55
+ protected detectUseCase(path: string): "development" | "testing" | "production" | "experimental" | "archived";
56
+ }
57
+ //# sourceMappingURL=BaseCleaner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseCleaner.d.ts","sourceRoot":"","sources":["../../src/cleaners/BaseCleaner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,SAAS,EACT,aAAa,EACb,WAAW,EACX,SAAS,EACT,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAWlB,8BAAsB,WAAY,YAAW,aAAa;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IACxC,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAE3C;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IA6BpD;;OAEG;IACH,SAAS,CAAC,eAAe,CACvB,IAAI,EAAE,MAAM,EACZ,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO;IA+BV;;OAEG;IACH,SAAS,CAAC,oBAAoB,CAC5B,KAAK,EAAE,MAAM,EAAE,EACf,cAAc,GAAE,MAAM,EAAO,GAC5B,MAAM,EAAE;IAeX;;OAEG;IACG,KAAK,CACT,MAAM,CAAC,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,sBAAsB,EACjC,UAAU,CAAC,EAAE,SAAS,EACtB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,WAAW,CAAC;IA2CvB;;OAEG;IACG,eAAe,CACnB,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,CAAC,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,SAAS,EACtB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,WAAW,CAAC;IA4CvB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CACxB,UAAU,EAAE,aAAa,EAAE,EAC3B,QAAQ,CAAC,EAAE,sBAAsB,GAChC,aAAa,EAAE;IAmDlB;;OAEG;cACa,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAe/D;;OAEG;cACa,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAetD;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO;IAajE;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAelD;;OAEG;IACH,SAAS,CAAC,gBAAgB,CACxB,IAAI,EAAE,MAAM,GACX,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,KAAK;IAc9C;;OAEG;IACH,SAAS,CAAC,aAAa,CACrB,IAAI,EAAE,MAAM,GACX,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,cAAc,GAAG,UAAU;CAO1E"}
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseCleaner = void 0;
4
+ const fs_1 = require("fs");
5
+ const promises_1 = require("fs/promises");
6
+ const path_1 = require("path");
7
+ const child_process_1 = require("child_process");
8
+ const util_1 = require("util");
9
+ const minimatch_1 = require("minimatch");
10
+ const cli_1 = require("../utils/cli");
11
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
12
+ class BaseCleaner {
13
+ /**
14
+ * Get detailed cache categories with metadata
15
+ */
16
+ async getCacheCategories() {
17
+ // Default implementation - override in specific cleaners
18
+ const info = await this.getCacheInfo();
19
+ const categories = [];
20
+ for (const path of info.paths) {
21
+ if ((0, fs_1.existsSync)(path)) {
22
+ const stat = (0, fs_1.statSync)(path);
23
+ const category = {
24
+ id: `${this.name}-${(0, path_1.basename)(path)}`,
25
+ name: (0, path_1.basename)(path),
26
+ description: `Cache directory: ${path}`,
27
+ paths: [path],
28
+ size: await this.getDirectorySize(path),
29
+ lastModified: stat.mtime,
30
+ lastAccessed: stat.atime,
31
+ priority: "normal",
32
+ useCase: "development",
33
+ ageInDays: Math.floor((Date.now() - stat.mtime.getTime()) / (1000 * 60 * 60 * 24)),
34
+ };
35
+ categories.push(category);
36
+ }
37
+ }
38
+ return categories;
39
+ }
40
+ /**
41
+ * Check if a path is protected
42
+ */
43
+ isProtectedPath(path, protectedPaths = []) {
44
+ if (!protectedPaths.length)
45
+ return false;
46
+ const normalizedPath = (0, path_1.resolve)(path);
47
+ for (const protectedPattern of protectedPaths) {
48
+ // Support both exact paths and glob patterns
49
+ if (protectedPattern.includes("*") || protectedPattern.includes("?")) {
50
+ // It's a glob pattern
51
+ if ((0, minimatch_1.minimatch)(normalizedPath, protectedPattern)) {
52
+ (0, cli_1.printVerbose)(`Path ${path} is protected by pattern: ${protectedPattern}`);
53
+ return true;
54
+ }
55
+ }
56
+ else {
57
+ // It's an exact path or directory
58
+ const normalizedProtected = (0, path_1.resolve)(protectedPattern);
59
+ if (normalizedPath === normalizedProtected ||
60
+ normalizedPath.startsWith(normalizedProtected + "/")) {
61
+ (0, cli_1.printVerbose)(`Path ${path} is protected: ${protectedPattern}`);
62
+ return true;
63
+ }
64
+ }
65
+ }
66
+ return false;
67
+ }
68
+ /**
69
+ * Filter paths to exclude protected ones
70
+ */
71
+ filterProtectedPaths(paths, protectedPaths = []) {
72
+ if (!protectedPaths.length)
73
+ return paths;
74
+ const filtered = paths.filter((path) => !this.isProtectedPath(path, protectedPaths));
75
+ const skippedCount = paths.length - filtered.length;
76
+ if (skippedCount > 0) {
77
+ (0, cli_1.printVerbose)(`Skipped ${skippedCount} protected path(s)`);
78
+ }
79
+ return filtered;
80
+ }
81
+ /**
82
+ * Clear cache with selection criteria
83
+ */
84
+ async clear(dryRun, criteria, _cacheInfo, protectedPaths) {
85
+ const categories = await this.getCacheCategories();
86
+ const filteredCategories = this.filterCategories(categories, criteria);
87
+ let totalSizeBefore = 0;
88
+ let clearedPaths = [];
89
+ let clearedCategories = [];
90
+ for (const category of filteredCategories) {
91
+ // Filter out protected paths from this category
92
+ const allowedPaths = this.filterProtectedPaths(category.paths, protectedPaths);
93
+ if (allowedPaths.length > 0) {
94
+ totalSizeBefore += category.size || 0;
95
+ clearedPaths.push(...allowedPaths);
96
+ clearedCategories.push(category.id);
97
+ }
98
+ else if (category.paths.length > 0) {
99
+ (0, cli_1.printVerbose)(`Skipping category ${category.id} - all paths are protected`);
100
+ }
101
+ }
102
+ if (!dryRun) {
103
+ // Actual clearing logic would go here
104
+ for (const path of clearedPaths) {
105
+ await this.clearPath(path);
106
+ }
107
+ }
108
+ return {
109
+ name: this.name,
110
+ success: true,
111
+ sizeBefore: totalSizeBefore,
112
+ sizeAfter: dryRun ? totalSizeBefore : 0,
113
+ clearedPaths,
114
+ clearedCategories,
115
+ };
116
+ }
117
+ /**
118
+ * Clear specific categories
119
+ */
120
+ async clearByCategory(categoryIds, dryRun, _cacheInfo, protectedPaths) {
121
+ const categories = await this.getCacheCategories();
122
+ const selectedCategories = categories.filter((c) => categoryIds.includes(c.id));
123
+ let totalSizeBefore = 0;
124
+ let clearedPaths = [];
125
+ let clearedCategories = [];
126
+ for (const category of selectedCategories) {
127
+ // Filter out protected paths from this category
128
+ const allowedPaths = this.filterProtectedPaths(category.paths, protectedPaths);
129
+ if (allowedPaths.length > 0) {
130
+ totalSizeBefore += category.size || 0;
131
+ clearedPaths.push(...allowedPaths);
132
+ clearedCategories.push(category.id);
133
+ }
134
+ else if (category.paths.length > 0) {
135
+ (0, cli_1.printVerbose)(`Skipping category ${category.id} - all paths are protected`);
136
+ }
137
+ }
138
+ if (!dryRun) {
139
+ for (const path of clearedPaths) {
140
+ await this.clearPath(path);
141
+ }
142
+ }
143
+ return {
144
+ name: this.name,
145
+ success: true,
146
+ sizeBefore: totalSizeBefore,
147
+ sizeAfter: dryRun ? totalSizeBefore : 0,
148
+ clearedPaths,
149
+ clearedCategories,
150
+ };
151
+ }
152
+ /**
153
+ * Filter categories based on criteria
154
+ */
155
+ filterCategories(categories, criteria) {
156
+ if (!criteria)
157
+ return categories;
158
+ return categories.filter((category) => {
159
+ // Age filtering
160
+ if (criteria.olderThanDays !== undefined &&
161
+ category.ageInDays !== undefined) {
162
+ if (category.ageInDays < criteria.olderThanDays)
163
+ return false;
164
+ }
165
+ if (criteria.newerThanDays !== undefined &&
166
+ category.ageInDays !== undefined) {
167
+ if (category.ageInDays > criteria.newerThanDays)
168
+ return false;
169
+ }
170
+ // Size filtering
171
+ if (criteria.largerThanMB !== undefined && category.size !== undefined) {
172
+ if (category.size < criteria.largerThanMB * 1024 * 1024)
173
+ return false;
174
+ }
175
+ if (criteria.smallerThanMB !== undefined && category.size !== undefined) {
176
+ if (category.size > criteria.smallerThanMB * 1024 * 1024)
177
+ return false;
178
+ }
179
+ // Use case filtering
180
+ if (criteria.useCases && criteria.useCases.length > 0) {
181
+ if (!criteria.useCases.includes(category.useCase))
182
+ return false;
183
+ }
184
+ // Priority filtering
185
+ if (criteria.priorities && criteria.priorities.length > 0) {
186
+ if (!criteria.priorities.includes(category.priority))
187
+ return false;
188
+ }
189
+ // Project-specific filtering
190
+ if (criteria.projectSpecific !== undefined) {
191
+ if (category.isProjectSpecific !== criteria.projectSpecific)
192
+ return false;
193
+ }
194
+ // Category ID filtering
195
+ if (criteria.categories && criteria.categories.length > 0) {
196
+ if (!criteria.categories.includes(category.id))
197
+ return false;
198
+ }
199
+ return true;
200
+ });
201
+ }
202
+ /**
203
+ * Get directory size in bytes
204
+ */
205
+ async getDirectorySize(path) {
206
+ if (!(0, fs_1.existsSync)(path))
207
+ return 0;
208
+ try {
209
+ // Use du command for accurate size calculation
210
+ const { stdout } = await execAsync(`du -sk "${path}" 2>/dev/null || echo "0"`);
211
+ const sizeKB = parseInt(stdout.split("\t")[0]) || 0;
212
+ return sizeKB * 1024;
213
+ }
214
+ catch {
215
+ return 0;
216
+ }
217
+ }
218
+ /**
219
+ * Clear a specific path
220
+ */
221
+ async clearPath(path) {
222
+ if (!(0, fs_1.existsSync)(path))
223
+ return;
224
+ try {
225
+ // Use native Node.js fs operations for better security
226
+ // This eliminates any potential for command injection
227
+ await (0, promises_1.rm)(path, {
228
+ recursive: true, // Handles directories recursively
229
+ force: true, // Ignores errors if file doesn't exist
230
+ });
231
+ }
232
+ catch (error) {
233
+ console.error(`Failed to clear ${path}:`, error);
234
+ }
235
+ }
236
+ /**
237
+ * Detect if a path has been recently used
238
+ */
239
+ isRecentlyUsed(path, days = 7) {
240
+ if (!(0, fs_1.existsSync)(path))
241
+ return false;
242
+ try {
243
+ const stat = (0, fs_1.statSync)(path);
244
+ const daysSinceAccess = (Date.now() - stat.atime.getTime()) / (1000 * 60 * 60 * 24);
245
+ return daysSinceAccess < days;
246
+ }
247
+ catch {
248
+ return false;
249
+ }
250
+ }
251
+ /**
252
+ * Detect if a path is project-specific
253
+ */
254
+ isProjectSpecific(path) {
255
+ // Check if path contains common project indicators
256
+ const projectIndicators = [
257
+ "node_modules/.cache",
258
+ "target/debug",
259
+ "target/release",
260
+ "build/cache",
261
+ ".next/cache",
262
+ ".nuxt/cache",
263
+ "dist/cache",
264
+ ];
265
+ return projectIndicators.some((indicator) => path.includes(indicator));
266
+ }
267
+ /**
268
+ * Get cache priority based on path and usage
269
+ */
270
+ getCachePriority(path) {
271
+ // Critical: Currently active project caches
272
+ if (this.isRecentlyUsed(path, 1))
273
+ return "critical";
274
+ // Important: Recently used (within a week)
275
+ if (this.isRecentlyUsed(path, 7))
276
+ return "important";
277
+ // Low: Very old caches
278
+ if (!this.isRecentlyUsed(path, 30))
279
+ return "low";
280
+ // Normal: Everything else
281
+ return "normal";
282
+ }
283
+ /**
284
+ * Detect use case based on path patterns
285
+ */
286
+ detectUseCase(path) {
287
+ if (path.includes("test") || path.includes("spec"))
288
+ return "testing";
289
+ if (path.includes("prod") || path.includes("release"))
290
+ return "production";
291
+ if (path.includes("exp") || path.includes("beta"))
292
+ return "experimental";
293
+ if (!this.isRecentlyUsed(path, 90))
294
+ return "archived";
295
+ return "development";
296
+ }
297
+ }
298
+ exports.BaseCleaner = BaseCleaner;
299
+ //# sourceMappingURL=BaseCleaner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseCleaner.js","sourceRoot":"","sources":["../../src/cleaners/BaseCleaner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { CleanerModule, CacheType } from "../types";
2
+ /**
3
+ * Metadata for cleaner registration
4
+ */
5
+ export interface CleanerMetadata {
6
+ name: string;
7
+ type: CacheType;
8
+ description: string;
9
+ patterns?: string[];
10
+ commands?: string[];
11
+ platforms?: NodeJS.Platform[];
12
+ priority?: number;
13
+ }
14
+ /**
15
+ * Registry for managing cleaners dynamically
16
+ */
17
+ export declare class CleanerRegistry {
18
+ private static instance;
19
+ private cleaners;
20
+ private metadata;
21
+ private constructor();
22
+ static getInstance(): CleanerRegistry;
23
+ /**
24
+ * Register a cleaner with metadata
25
+ */
26
+ register(cleaner: CleanerModule, metadata?: CleanerMetadata): void;
27
+ /**
28
+ * Register a cleaner class (will be instantiated on demand)
29
+ */
30
+ registerClass(CleanerClass: new () => CleanerModule, metadata?: CleanerMetadata): void;
31
+ /**
32
+ * Get a cleaner by name
33
+ */
34
+ getCleaner(name: string): CleanerModule | undefined;
35
+ /**
36
+ * Get all registered cleaners
37
+ */
38
+ getAllCleaners(): CleanerModule[];
39
+ /**
40
+ * Get cleaners by type
41
+ */
42
+ getCleanersByType(type: CacheType): CleanerModule[];
43
+ /**
44
+ * Get available cleaners (ones that are installed)
45
+ */
46
+ getAvailableCleaners(): Promise<CleanerModule[]>;
47
+ /**
48
+ * Auto-detect and register cleaners based on system
49
+ */
50
+ autoDetect(): Promise<void>;
51
+ /**
52
+ * Get metadata for a cleaner
53
+ */
54
+ getMetadata(name: string): CleanerMetadata | undefined;
55
+ /**
56
+ * Remove a cleaner from the registry
57
+ */
58
+ unregister(name: string): boolean;
59
+ /**
60
+ * Clear all registered cleaners
61
+ */
62
+ clear(): void;
63
+ }
64
+ export declare const cleanerRegistry: CleanerRegistry;
65
+ //# sourceMappingURL=CleanerRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CleanerRegistry.d.ts","sourceRoot":"","sources":["../../src/cleaners/CleanerRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAIpD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,QAAQ,CAA2C;IAE3D,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,eAAe;IAOrC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI;IAQlE;;OAEG;IACH,aAAa,CACX,YAAY,EAAE,UAAU,aAAa,EACrC,QAAQ,CAAC,EAAE,eAAe,GACzB,IAAI;IAKP;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAInD;;OAEG;IACH,cAAc,IAAI,aAAa,EAAE;IAIjC;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,aAAa,EAAE;IAInD;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAYtD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBjC;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAItD;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKjC;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAGD,eAAO,MAAM,eAAe,iBAAgC,CAAC"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cleanerRegistry = exports.CleanerRegistry = void 0;
4
+ const cli_1 = require("../utils/cli");
5
+ /**
6
+ * Registry for managing cleaners dynamically
7
+ */
8
+ class CleanerRegistry {
9
+ constructor() {
10
+ this.cleaners = new Map();
11
+ this.metadata = new Map();
12
+ }
13
+ static getInstance() {
14
+ if (!CleanerRegistry.instance) {
15
+ CleanerRegistry.instance = new CleanerRegistry();
16
+ }
17
+ return CleanerRegistry.instance;
18
+ }
19
+ /**
20
+ * Register a cleaner with metadata
21
+ */
22
+ register(cleaner, metadata) {
23
+ this.cleaners.set(cleaner.name, cleaner);
24
+ if (metadata) {
25
+ this.metadata.set(cleaner.name, metadata);
26
+ }
27
+ (0, cli_1.printVerbose)(`Registered cleaner: ${cleaner.name}`);
28
+ }
29
+ /**
30
+ * Register a cleaner class (will be instantiated on demand)
31
+ */
32
+ registerClass(CleanerClass, metadata) {
33
+ const instance = new CleanerClass();
34
+ this.register(instance, metadata);
35
+ }
36
+ /**
37
+ * Get a cleaner by name
38
+ */
39
+ getCleaner(name) {
40
+ return this.cleaners.get(name);
41
+ }
42
+ /**
43
+ * Get all registered cleaners
44
+ */
45
+ getAllCleaners() {
46
+ return Array.from(this.cleaners.values());
47
+ }
48
+ /**
49
+ * Get cleaners by type
50
+ */
51
+ getCleanersByType(type) {
52
+ return this.getAllCleaners().filter((cleaner) => cleaner.type === type);
53
+ }
54
+ /**
55
+ * Get available cleaners (ones that are installed)
56
+ */
57
+ async getAvailableCleaners() {
58
+ const available = [];
59
+ for (const cleaner of this.getAllCleaners()) {
60
+ if (await cleaner.isAvailable()) {
61
+ available.push(cleaner);
62
+ }
63
+ }
64
+ return available;
65
+ }
66
+ /**
67
+ * Auto-detect and register cleaners based on system
68
+ */
69
+ async autoDetect() {
70
+ (0, cli_1.printVerbose)("Auto-detecting available cleaners...");
71
+ // Sort by priority for detection
72
+ const sortedCleaners = Array.from(this.metadata.entries()).sort((a, b) => (b[1].priority || 0) - (a[1].priority || 0));
73
+ for (const [name, meta] of sortedCleaners) {
74
+ const cleaner = this.cleaners.get(name);
75
+ if (!cleaner)
76
+ continue;
77
+ // Check platform compatibility
78
+ if (meta.platforms && !meta.platforms.includes(process.platform)) {
79
+ (0, cli_1.printVerbose)(`Skipping ${name} - not supported on ${process.platform}`);
80
+ continue;
81
+ }
82
+ // Check if available
83
+ if (await cleaner.isAvailable()) {
84
+ (0, cli_1.printVerbose)(`Detected: ${name}`);
85
+ }
86
+ }
87
+ }
88
+ /**
89
+ * Get metadata for a cleaner
90
+ */
91
+ getMetadata(name) {
92
+ return this.metadata.get(name);
93
+ }
94
+ /**
95
+ * Remove a cleaner from the registry
96
+ */
97
+ unregister(name) {
98
+ this.metadata.delete(name);
99
+ return this.cleaners.delete(name);
100
+ }
101
+ /**
102
+ * Clear all registered cleaners
103
+ */
104
+ clear() {
105
+ this.cleaners.clear();
106
+ this.metadata.clear();
107
+ }
108
+ }
109
+ exports.CleanerRegistry = CleanerRegistry;
110
+ // Export singleton instance
111
+ exports.cleanerRegistry = CleanerRegistry.getInstance();
112
+ //# sourceMappingURL=CleanerRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CleanerRegistry.js","sourceRoot":"","sources":["../../src/cleaners/CleanerRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { CleanerModule, CacheInfo, ClearResult, CacheSelectionCriteria } from "../types";
2
+ export declare class AndroidStudioCleaner implements CleanerModule {
3
+ name: string;
4
+ type: "ide";
5
+ description: string;
6
+ private findAndroidStudioInstallation;
7
+ private getAndroidStudioCachePaths;
8
+ private findAndroidProjectBuildDirs;
9
+ private findAndroidProjectsRecursively;
10
+ isAvailable(): Promise<boolean>;
11
+ getCacheInfo(): Promise<CacheInfo>;
12
+ clear(dryRun?: boolean, _criteria?: CacheSelectionCriteria, cacheInfo?: CacheInfo, protectedPaths?: string[]): Promise<ClearResult>;
13
+ }
14
+ declare const _default: AndroidStudioCleaner;
15
+ export default _default;
16
+ //# sourceMappingURL=androidstudio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"androidstudio.d.ts","sourceRoot":"","sources":["../../src/cleaners/androidstudio.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,EACX,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAQlB,qBAAa,oBAAqB,YAAW,aAAa;IACxD,IAAI,SAAmB;IACvB,IAAI,EAAG,KAAK,CAAU;IACtB,WAAW,SAAgE;YAE7D,6BAA6B;YA6C7B,0BAA0B;YA+G1B,2BAA2B;YA+B3B,8BAA8B;IA4DtC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IA2B/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAyClC,KAAK,CACT,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,sBAAsB,EAClC,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,WAAW,CAAC;CAsDxB;;AAED,wBAA0C"}