squeaky-clean 0.1.11 → 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 +3 -3
package/dist/cli.js ADDED
@@ -0,0 +1,367 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const commander_1 = require("commander");
38
+ const config_1 = require("./config");
39
+ const cli_1 = require("./utils/cli");
40
+ const program = new commander_1.Command();
41
+ // (would normally be imported from package.json)
42
+ const packageInfo = {
43
+ name: 'squeaky-clean',
44
+ version: '0.1.12',
45
+ description: 'Make your dev environment squeaky clean! ✨',
46
+ };
47
+ program
48
+ .name(packageInfo.name)
49
+ .description(packageInfo.description)
50
+ .version(packageInfo.version)
51
+ .configureHelp({
52
+ sortSubcommands: true,
53
+ });
54
+ // Global options
55
+ program
56
+ .option('-v, --verbose', 'enable verbose output')
57
+ .option('-q, --quiet', 'suppress non-essential output')
58
+ .option('-p', 'pristine mode', false)
59
+ .option('--config <path>', 'use custom config file')
60
+ .option('--json', 'output results in JSON format')
61
+ .option('--no-color', 'disable colored output')
62
+ .hook('preAction', (thisCommand) => {
63
+ const options = thisCommand.opts();
64
+ // Load custom config if specified
65
+ if (options.config) {
66
+ try {
67
+ config_1.config.loadCustomConfig(options.config);
68
+ }
69
+ catch (error) {
70
+ (0, cli_1.printError)(`Failed to load config: ${error}`);
71
+ process.exit(1);
72
+ }
73
+ }
74
+ if (options.verbose) {
75
+ config_1.config.set({ output: { ...config_1.config.get().output, verbose: true } });
76
+ }
77
+ if (options.noColor) {
78
+ config_1.config.set({ output: { ...config_1.config.get().output, useColors: false } });
79
+ }
80
+ if (options.quiet) {
81
+ config_1.config.set({ output: { ...config_1.config.get().output, quiet: true } });
82
+ }
83
+ if (options.json) {
84
+ config_1.config.set({ output: { ...config_1.config.get().output, format: 'json' } });
85
+ }
86
+ });
87
+ // Clean command - main functionality with granular options
88
+ program
89
+ .command('clean')
90
+ .description('clean development caches with granular control')
91
+ .option('-a, --all', 'clean all configured caches')
92
+ .option('-t, --types <types>', 'comma-separated list of cache types (package-manager,build-tool,browser,ide,system)')
93
+ .option('-e, --exclude <tools>', 'comma-separated list of tools to exclude')
94
+ .option('--include <tools>', 'comma-separated list of tools to include (overrides --all and --exclude)') // New option
95
+ .option('-d, --dry-run', 'show what would be cleaned without actually cleaning')
96
+ .option('-f, --force', 'skip confirmation prompts')
97
+ .option('-s, --sizes', 'show cache sizes before cleaning')
98
+ .option('--older-than <age>', 'clean caches older than specified age (e.g., 7d, 2w, 1m)')
99
+ .option('--newer-than <age>', 'clean caches newer than specified age')
100
+ .option('--larger-than <size>', 'clean caches larger than specified size (e.g., 100MB, 1GB)')
101
+ .option('--smaller-than <size>', 'clean caches smaller than specified size')
102
+ .option('--use-case <case>', 'clean specific use cases (development,testing,production,experimental,archived)')
103
+ .option('--priority <level>', 'clean only specified priority (critical,important,normal,low)')
104
+ .option('--categories <ids>', 'clean specific category IDs (comma-separated)')
105
+ .option('--sub-caches <cleaner:category,...>', 'clean specific sub-caches within a cleaner (e.g., xcode:DerivedData,npm:logs)')
106
+ .action(async (options) => {
107
+ try {
108
+ (0, cli_1.printHeader)('Cache Cleaning');
109
+ // Import and run the clean command
110
+ const { cleanCommand } = await Promise.resolve().then(() => __importStar(require('./commands/clean')));
111
+ await cleanCommand(options);
112
+ }
113
+ catch (error) {
114
+ (0, cli_1.printError)(`Failed to clean caches: ${error instanceof Error ? error.message : error}`);
115
+ process.exit(1);
116
+ }
117
+ });
118
+ // List command - show available caches
119
+ program
120
+ .command('list')
121
+ .alias('ls')
122
+ .description('list available caches and their status')
123
+ .option('-s, --sizes', 'include cache sizes (slower)')
124
+ .option('-t, --type <type>', 'filter by cache type')
125
+ .action(async (options) => {
126
+ try {
127
+ (0, cli_1.printHeader)('Available Caches');
128
+ const { listCommand } = await Promise.resolve().then(() => __importStar(require('./commands/list')));
129
+ await listCommand(options);
130
+ }
131
+ catch (error) {
132
+ (0, cli_1.printError)(`Failed to list caches: ${error instanceof Error ? error.message : error}`);
133
+ process.exit(1);
134
+ }
135
+ });
136
+ // Categories command - show cache categories with granular details
137
+ program
138
+ .command('categories')
139
+ .alias('cats')
140
+ .description('show detailed cache categories with usage patterns')
141
+ .option('-t, --tool <tool>', 'show categories for specific tool')
142
+ .option('--type <type>', 'filter by cache type')
143
+ .option('-v, --verbose', 'show detailed information')
144
+ .action(async (options) => {
145
+ try {
146
+ const { categoriesCommand } = await Promise.resolve().then(() => __importStar(require('./commands/categories')));
147
+ await categoriesCommand(options);
148
+ }
149
+ catch (error) {
150
+ (0, cli_1.printError)(`Failed to show categories: ${error instanceof Error ? error.message : error}`);
151
+ process.exit(1);
152
+ }
153
+ });
154
+ // Sizes command - show cache sizes
155
+ program
156
+ .command('sizes')
157
+ .description('show cache sizes without clearing')
158
+ .option('-t, --type <type>', 'filter by cache type')
159
+ .option('--json', 'output as JSON')
160
+ .action(async (options) => {
161
+ try {
162
+ (0, cli_1.printHeader)('Cache Sizes');
163
+ const { sizesCommand } = await Promise.resolve().then(() => __importStar(require('./commands/sizes')));
164
+ await sizesCommand(options);
165
+ }
166
+ catch (error) {
167
+ (0, cli_1.printError)(`Failed to get cache sizes: ${error instanceof Error ? error.message : error}`);
168
+ process.exit(1);
169
+ }
170
+ });
171
+ // Config command - manage configuration
172
+ const configCmd = program
173
+ .command('config')
174
+ .description('manage configuration settings')
175
+ .option('-l, --list', 'list current configuration')
176
+ .option('-r, --reset', 'reset to default configuration')
177
+ .option('-p, --path', 'show config file path')
178
+ .option('-i, --interactive', 'interactive configuration wizard')
179
+ .option('-g, --get <key>', 'get a specific configuration value')
180
+ .option('-s, --set <key=value>', 'set a specific configuration value')
181
+ .option('-e, --enable <tool>', 'enable a specific cache cleaner')
182
+ .option('-d, --disable <tool>', 'disable a specific cache cleaner')
183
+ .action(async (options) => {
184
+ try {
185
+ // No need to set default behavior here - let configCommand handle it
186
+ const { configCommand } = await Promise.resolve().then(() => __importStar(require('./commands/config')));
187
+ await configCommand(options);
188
+ }
189
+ catch (error) {
190
+ (0, cli_1.printError)(`Failed to manage config: ${error instanceof Error ? error.message : error}`);
191
+ process.exit(1);
192
+ }
193
+ });
194
+ // Emojis command - manage emoji output
195
+ program
196
+ .command('emojis <mode>')
197
+ .description('manage emoji output in the console (on, off, minimal)')
198
+ .action(async (mode) => {
199
+ try {
200
+ const { emojisCommand } = await Promise.resolve().then(() => __importStar(require('./commands/emojis')));
201
+ await emojisCommand(mode);
202
+ }
203
+ catch (error) {
204
+ (0, cli_1.printError)(`Failed to set emoji mode: ${error instanceof Error ? error.message : error}`);
205
+ process.exit(1);
206
+ }
207
+ });
208
+ // Config doctor subcommand - migrate legacy config
209
+ configCmd
210
+ .command('doctor')
211
+ .description('migrate legacy configuration to new format')
212
+ .option('-i, --input <path>', 'input config path (default: ~/.squeaky-clean/config.json)')
213
+ .option('-o, --output <path>', 'output path for migrated config (default: overwrites input)')
214
+ .option('-d, --dry-run', 'show what would be migrated without writing')
215
+ .option('-q, --quiet', 'minimal output')
216
+ .action(async (options) => {
217
+ try {
218
+ (0, cli_1.printHeader)('Configuration Migration');
219
+ const { runConfigDoctor } = await Promise.resolve().then(() => __importStar(require('./commands/configDoctor')));
220
+ await runConfigDoctor({
221
+ input: options.input,
222
+ output: options.output,
223
+ dryRun: options.dryRun,
224
+ quiet: options.quiet,
225
+ });
226
+ }
227
+ catch (error) {
228
+ (0, cli_1.printError)(`Failed to migrate config: ${error instanceof Error ? error.message : error}`);
229
+ process.exit(1);
230
+ }
231
+ });
232
+ // Doctor command - diagnose issues and migrate config
233
+ program
234
+ .command('doctor')
235
+ .alias('dr')
236
+ .description('diagnose potential issues and migrate legacy config')
237
+ .option('--config', 'migrate legacy configuration to new format')
238
+ .option('-i, --input <path>', 'input config path (default: ~/.squeaky-clean/config.json)')
239
+ .option('-o, --output <path>', 'output path for migrated config (default: overwrites input)')
240
+ .option('-d, --dry-run', 'show what would be migrated without writing')
241
+ .option('-q, --quiet', 'minimal output')
242
+ .action(async (options) => {
243
+ try {
244
+ if (options.config || options.input || options.output || options.dryRun) {
245
+ // Config migration mode
246
+ (0, cli_1.printHeader)('Configuration Migration');
247
+ const { runConfigDoctor } = await Promise.resolve().then(() => __importStar(require('./commands/configDoctor')));
248
+ await runConfigDoctor({
249
+ input: options.input,
250
+ output: options.output,
251
+ dryRun: options.dryRun,
252
+ quiet: options.quiet,
253
+ });
254
+ }
255
+ else {
256
+ // System diagnosis mode
257
+ (0, cli_1.printHeader)('System Diagnosis');
258
+ const { doctorCommand } = await Promise.resolve().then(() => __importStar(require('./commands/doctor')));
259
+ await doctorCommand();
260
+ }
261
+ }
262
+ catch (error) {
263
+ (0, cli_1.printError)(`Failed to run doctor: ${error instanceof Error ? error.message : error}`);
264
+ process.exit(1);
265
+ }
266
+ });
267
+ // Auto command - smart automatic clearing
268
+ program
269
+ .command('auto')
270
+ .description('automatically clear caches based on smart detection')
271
+ .option('-s, --safe', 'only clear safe caches')
272
+ .option('-a, --aggressive', 'include more cache types')
273
+ .action(async (options) => {
274
+ try {
275
+ (0, cli_1.printHeader)('Smart Cache Clearing');
276
+ const { autoCommand } = await Promise.resolve().then(() => __importStar(require('./commands/auto')));
277
+ await autoCommand(options);
278
+ }
279
+ catch (error) {
280
+ (0, cli_1.printError)(`Failed to auto-clear: ${error instanceof Error ? error.message : error}`);
281
+ process.exit(1);
282
+ }
283
+ });
284
+ // Universal Binary command - thin Universal Binaries on Apple Silicon
285
+ program
286
+ .command('ub')
287
+ .aliases(['thin', 'universal-binaries'])
288
+ .description('thin Universal Binaries on Apple Silicon to remove unused x86_64 code')
289
+ .option('-a, --all', 'thin all Universal Binaries without prompting')
290
+ .option('-l, --list', 'list Universal Binaries without thinning')
291
+ .option('-d, --dry-run', 'show what would be thinned without actually thinning')
292
+ .option('-f, --force', 'skip confirmation prompts')
293
+ .action(async (options) => {
294
+ try {
295
+ const { ubCommand } = await Promise.resolve().then(() => __importStar(require('./commands/ub')));
296
+ await ubCommand(options);
297
+ }
298
+ catch (error) {
299
+ (0, cli_1.printError)(`Failed to thin binaries: ${error instanceof Error ? error.message : error}`);
300
+ process.exit(1);
301
+ }
302
+ });
303
+ // Interactive command - guided cache cleaning
304
+ program
305
+ .command('interactive')
306
+ .alias('i')
307
+ .description('interactively select and clean caches with guided prompts')
308
+ .option('-v, --verbose', 'enable verbose output')
309
+ .action(async (options) => {
310
+ try {
311
+ const { interactiveCommand } = await Promise.resolve().then(() => __importStar(require('./commands/interactive')));
312
+ await interactiveCommand.parseAsync(['node', 'squeaky', 'interactive', ...(options.verbose ? ['--verbose'] : [])]);
313
+ }
314
+ catch (error) {
315
+ (0, cli_1.printError)(`Failed to run interactive mode: ${error instanceof Error ? error.message : error}`);
316
+ process.exit(1);
317
+ }
318
+ });
319
+ // Help improvements
320
+ program.addHelpText('after', `
321
+ Examples:
322
+ $ squeaky clean --all # Clean all configured caches
323
+ $ squeaky clean -t package-manager # Clean only package manager caches
324
+ $ squeaky clean --exclude chrome # Clean all except Chrome cache
325
+ $ squeaky list --sizes # Show all caches with sizes
326
+ $ squeaky config --interactive # Configure cache preferences
327
+ $ squeaky auto --safe # Smart automatic cleaning (safe mode)
328
+ $ squeaky ub --list # List Universal Binaries (Apple Silicon)
329
+ $ squeaky ub # Interactive binary thinning
330
+ $ squeaky-clean clean -a # Using the full name
331
+
332
+ Cache Types:
333
+ package-manager npm, yarn, pnpm, bun caches
334
+ build-tool webpack, vite, nx, turbo, gradle, maven caches
335
+ browser Chrome, Firefox development caches
336
+ ide VS Code, WebStorm, Xcode caches
337
+ system Docker images/containers, temp files, logs
338
+
339
+ Configuration:
340
+ Config stored at: ~/.config/squeaky-clean/config.json
341
+ Use 'squeaky config' to customize preferences
342
+
343
+ ✨ Make your development environment squeaky clean! ✨
344
+ `);
345
+ // Error handling
346
+ program.configureOutput({
347
+ writeErr: (str) => (0, cli_1.printError)(str),
348
+ });
349
+ // potentially show pristine boot
350
+ (async () => {
351
+ // Check if pristine flag is present
352
+ const hasPristineFlag = process.argv.includes('-p');
353
+ // if no command, pristine then help
354
+ if (!process.argv.slice(2).length || (process.argv.slice(2).length === 1 && hasPristineFlag)) {
355
+ await (0, cli_1.showBootPristine)(hasPristineFlag);
356
+ program.outputHelp();
357
+ }
358
+ else if (hasPristineFlag) {
359
+ // always pristine if flag is present
360
+ await (0, cli_1.showBootPristine)(true);
361
+ program.parse();
362
+ }
363
+ else {
364
+ program.parse();
365
+ }
366
+ })();
367
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface AutoOptions {
2
+ safe?: boolean;
3
+ aggressive?: boolean;
4
+ verbose?: boolean;
5
+ }
6
+ export declare function autoCommand(options: AutoOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=auto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.d.ts","sourceRoot":"","sources":["../../src/commands/auto.ts"],"names":[],"mappings":"AAWA,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4OrE"}
@@ -0,0 +1,251 @@
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.autoCommand = autoCommand;
7
+ const cli_1 = require("../utils/cli");
8
+ const cleaners_1 = require("../cleaners");
9
+ const ora_1 = __importDefault(require("ora"));
10
+ async function autoCommand(options) {
11
+ try {
12
+ console.log("\n🤖 Intelligent Cache Cleaning");
13
+ console.log("─".repeat(40));
14
+ (0, cli_1.printInfo)("Analyzing your development environment...");
15
+ const spinner = (0, ora_1.default)("Scanning caches...").start();
16
+ // Get all cache information, excluding universal-binary (separate operation)
17
+ const cacheInfos = await cleaners_1.cacheManager.getAllCacheInfo();
18
+ const availableCaches = cacheInfos.filter((info) => info.isInstalled &&
19
+ (info.size || 0) > 0 &&
20
+ info.name !== "universal-binary");
21
+ spinner.stop();
22
+ if (availableCaches.length === 0) {
23
+ (0, cli_1.printInfo)("No caches found with reclaimable space.");
24
+ (0, cli_1.printSuccess)("Your development environment is already clean! 🎉");
25
+ return;
26
+ }
27
+ // Set thresholds based on mode
28
+ const minSizeBytes = options.aggressive
29
+ ? 5 * 1024 * 1024 // 5MB in aggressive mode
30
+ : 20 * 1024 * 1024; // 20MB in safe mode
31
+ const maxAgeDays = options.aggressive ? 3 : 7; // 3 days aggressive, 7 days safe
32
+ const maxAgeMs = maxAgeDays * 24 * 60 * 60 * 1000;
33
+ const cutoffDate = new Date(Date.now() - maxAgeMs);
34
+ // Smart filtering logic
35
+ const recommendations = [];
36
+ for (const cache of availableCaches) {
37
+ const sizeInMB = (cache.size || 0) / (1024 * 1024);
38
+ const lastModified = cache.lastModified
39
+ ? new Date(cache.lastModified)
40
+ : null;
41
+ const isOld = lastModified && lastModified < cutoffDate;
42
+ // High priority: Large, old, or temporary caches
43
+ const cacheSafe = isSafeToAutoClean(cache.name, cache.type);
44
+ if (sizeInMB > 100) {
45
+ recommendations.push({
46
+ cache,
47
+ reason: `Large cache (${sizeInMB.toFixed(1)} MB)`,
48
+ priority: "high",
49
+ safe: cacheSafe,
50
+ });
51
+ }
52
+ else if (isOld && sizeInMB > minSizeBytes / (1024 * 1024)) {
53
+ recommendations.push({
54
+ cache,
55
+ reason: `Old cache (${Math.floor((Date.now() - lastModified.getTime()) / (24 * 60 * 60 * 1000))} days)`,
56
+ priority: "high",
57
+ safe: cacheSafe,
58
+ });
59
+ }
60
+ // Medium priority: Moderate size caches
61
+ else if (sizeInMB > 50) {
62
+ recommendations.push({
63
+ cache,
64
+ reason: `Moderate size (${sizeInMB.toFixed(1)} MB)`,
65
+ priority: "medium",
66
+ safe: isSafeToAutoClean(cache.name, cache.type),
67
+ });
68
+ }
69
+ // Low priority: Smaller caches that are safe to clean
70
+ else if (sizeInMB > minSizeBytes / (1024 * 1024) &&
71
+ isSafeToAutoClean(cache.name, cache.type)) {
72
+ recommendations.push({
73
+ cache,
74
+ reason: `Safe cache (${sizeInMB.toFixed(1)} MB)`,
75
+ priority: "low",
76
+ safe: true,
77
+ });
78
+ }
79
+ }
80
+ if (recommendations.length === 0) {
81
+ (0, cli_1.printInfo)("No caches meet the criteria for automatic cleaning.");
82
+ (0, cli_1.printInfo)("Your caches are either small, recent, or contain important data.");
83
+ (0, cli_1.printInfo)("💡 Use `squeaky clean --dry-run` for manual review.");
84
+ return;
85
+ }
86
+ // Sort by priority and size
87
+ recommendations.sort((a, b) => {
88
+ const priorityOrder = { high: 3, medium: 2, low: 1 };
89
+ if (priorityOrder[a.priority] !== priorityOrder[b.priority]) {
90
+ return priorityOrder[b.priority] - priorityOrder[a.priority];
91
+ }
92
+ return (b.cache.size || 0) - (a.cache.size || 0);
93
+ });
94
+ // Display recommendations
95
+ console.log("\n🎯 Smart Cleaning Recommendations:");
96
+ console.log();
97
+ let totalRecommendedSize = 0;
98
+ const safesToClean = [];
99
+ const needsReview = [];
100
+ for (const rec of recommendations) {
101
+ const emoji = getPriorityEmoji(rec.priority);
102
+ const sizeStr = (0, cli_1.formatSizeWithColor)(rec.cache.size || 0);
103
+ const safetyFlag = rec.safe ? "✅" : "⚠️";
104
+ console.log(`${emoji} ${safetyFlag} ${rec.cache.name} - ${sizeStr}`);
105
+ console.log(` ${rec.reason}`);
106
+ totalRecommendedSize += rec.cache.size || 0;
107
+ if (rec.safe) {
108
+ safesToClean.push(rec.cache.name);
109
+ }
110
+ else {
111
+ needsReview.push(rec.cache.name);
112
+ }
113
+ }
114
+ console.log();
115
+ (0, cli_1.printInfo)(`💾 Total recommended for cleaning: ${(0, cli_1.formatSizeWithColor)(totalRecommendedSize)}`);
116
+ if (safesToClean.length > 0) {
117
+ console.log();
118
+ (0, cli_1.printSuccess)(`✅ Safe to auto-clean (${safesToClean.length} caches):`);
119
+ safesToClean.forEach((name) => console.log(` • ${name}`));
120
+ }
121
+ if (needsReview.length > 0) {
122
+ console.log();
123
+ (0, cli_1.printWarning)(`⚠️ Need manual review (${needsReview.length} caches):`);
124
+ needsReview.forEach((name) => console.log(` • ${name}`));
125
+ }
126
+ // Execute cleaning based on mode
127
+ const mode = options.aggressive
128
+ ? "aggressive"
129
+ : options.safe
130
+ ? "safe"
131
+ : "smart";
132
+ console.log();
133
+ (0, cli_1.printInfo)(`🤖 Running in ${mode} mode...`);
134
+ if (options.safe) {
135
+ (0, cli_1.printInfo)("Safe mode: Only cleaning verified safe caches.");
136
+ }
137
+ else if (options.aggressive) {
138
+ (0, cli_1.printInfo)("Aggressive mode: Cleaning all recommended caches.");
139
+ }
140
+ const cachesToClean = options.aggressive
141
+ ? recommendations.map((r) => r.cache.name)
142
+ : safesToClean;
143
+ if (cachesToClean.length > 0) {
144
+ const excludeCaches = cacheInfos
145
+ .filter((cache) => !cachesToClean.includes(cache.name))
146
+ .map((cache) => cache.name);
147
+ console.log();
148
+ const cleanSpinner = (0, ora_1.default)("Cleaning recommended caches...").start();
149
+ try {
150
+ const results = await cleaners_1.cacheManager.cleanAllCaches({
151
+ dryRun: false,
152
+ exclude: excludeCaches,
153
+ });
154
+ cleanSpinner.stop();
155
+ let actualFreed = 0;
156
+ let cleanedCount = 0;
157
+ let errorCount = 0;
158
+ console.log();
159
+ for (const result of results) {
160
+ if (!cachesToClean.includes(result.name))
161
+ continue;
162
+ if (result.success) {
163
+ const freed = (result.sizeBefore || 0) - (result.sizeAfter || 0);
164
+ actualFreed += freed;
165
+ cleanedCount++;
166
+ if (freed > 0) {
167
+ (0, cli_1.printSuccess)(`${cli_1.symbols.bubbles} ${result.name}: ${(0, cli_1.formatSizeWithColor)(freed)} freed`);
168
+ }
169
+ }
170
+ else {
171
+ errorCount++;
172
+ (0, cli_1.printError)(`❌ ${result.name}: ${result.error || "Unknown error"}`);
173
+ }
174
+ }
175
+ console.log();
176
+ if (actualFreed > 0) {
177
+ (0, cli_1.printSuccess)(`🎉 Auto-cleaning complete! Freed ${(0, cli_1.formatSizeWithColor)(actualFreed)}`);
178
+ (0, cli_1.printSuccess)(`✨ Your dev environment is now squeaky clean!`);
179
+ }
180
+ else {
181
+ (0, cli_1.printInfo)("No space was actually freed (caches may have been empty)");
182
+ }
183
+ if (needsReview.length > 0 && !options.aggressive) {
184
+ console.log();
185
+ (0, cli_1.printInfo)("💡 Pro tip: Review the flagged caches manually:");
186
+ (0, cli_1.printInfo)(" `squeaky clean --dry-run` to preview all caches");
187
+ (0, cli_1.printInfo)(" `squeaky auto --aggressive` to clean everything");
188
+ }
189
+ }
190
+ catch (error) {
191
+ cleanSpinner.fail("Auto-cleaning failed");
192
+ throw error;
193
+ }
194
+ }
195
+ else {
196
+ (0, cli_1.printInfo)("No caches selected for automatic cleaning.");
197
+ }
198
+ }
199
+ catch (error) {
200
+ (0, cli_1.printError)(`Auto command error: ${error}`);
201
+ throw error;
202
+ }
203
+ }
204
+ function getPriorityEmoji(priority) {
205
+ switch (priority) {
206
+ case "high":
207
+ return "🔥";
208
+ case "medium":
209
+ return "⚡";
210
+ case "low":
211
+ return "💡";
212
+ }
213
+ }
214
+ /**
215
+ * Determine if a cache is safe to clean automatically based on cleaner type
216
+ * and known characteristics.
217
+ */
218
+ function isSafeToAutoClean(cacheName, cacheType) {
219
+ // Universal binary is a separate operation - never auto-clean
220
+ if (cacheName === "universal-binary") {
221
+ return false;
222
+ }
223
+ // Package managers are generally safe (downloaded artifacts can be re-fetched)
224
+ if (cacheType === "package-manager") {
225
+ return true;
226
+ }
227
+ // Build tools are generally safe (can be rebuilt)
228
+ if (cacheType === "build-tool") {
229
+ return true;
230
+ }
231
+ // Docker is safe (images can be re-pulled, but may take time)
232
+ if (cacheName === "docker") {
233
+ return true;
234
+ }
235
+ // Gradle is safe (downloaded dependencies)
236
+ if (cacheName === "gradle") {
237
+ return true;
238
+ }
239
+ // Browsers may contain user data - needs review
240
+ if (cacheType === "browser") {
241
+ return false;
242
+ }
243
+ // IDEs may contain important settings/history - needs review
244
+ // But Xcode DerivedData is safe, VSCode/Cursor/Windsurf caches are generally safe
245
+ const safeIdeCaches = ["xcode", "vscode", "cursor", "windsurf", "zed"];
246
+ if (cacheType === "ide" && safeIdeCaches.includes(cacheName)) {
247
+ return true;
248
+ }
249
+ return false;
250
+ }
251
+ //# sourceMappingURL=auto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.js","sourceRoot":"","sources":["../../src/commands/auto.ts"],"names":[],"mappings":"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"}