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
@@ -0,0 +1,255 @@
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.ConfigManager = exports.config = exports.defaultConfig = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const os_1 = __importDefault(require("os"));
10
+ exports.defaultConfig = {
11
+ enabledCaches: {
12
+ packageManagers: true,
13
+ buildTools: true,
14
+ browsers: false, // More conservative default
15
+ ides: false, // More conservative default
16
+ system: false, // More conservative default
17
+ },
18
+ tools: {
19
+ // Package managers
20
+ npm: true,
21
+ yarn: true,
22
+ pnpm: true,
23
+ bun: true,
24
+ pip: true,
25
+ cargo: true, // Rust cargo caches can be 5-50GB
26
+ poetry: true, // Python Poetry caches
27
+ pipenv: true, // Python Pipenv caches
28
+ cocoapods: true, // CocoaPods caches (macOS)
29
+ swiftpm: true, // Swift Package Manager caches (macOS)
30
+ nuget: true, // .NET NuGet caches can be 6-100GB
31
+ brew: true, // Homebrew caches (macOS)
32
+ nix: true, // Nix package manager caches
33
+ // Build tools
34
+ webpack: true,
35
+ vite: true,
36
+ nx: true,
37
+ turbo: true,
38
+ flutter: true,
39
+ "node-gyp": true, // Node native addon build caches
40
+ "go-build": true, // Go build caches
41
+ maven: true,
42
+ playwright: true, // Playwright browser binaries can be 1-2GB
43
+ // Browsers
44
+ chrome: false, // More conservative - browser caches can affect user experience
45
+ firefox: false,
46
+ // IDEs
47
+ vscode: true,
48
+ xcode: true, // Xcode can accumulate huge caches
49
+ androidstudio: true,
50
+ jetbrains: false, // More conservative for JetBrains IDEs
51
+ windsurf: true, // Windsurf IDE (Codeium) caches
52
+ cursor: true, // Cursor AI IDE caches
53
+ zed: true, // Zed editor caches
54
+ // System tools
55
+ docker: false, // More conservative - Docker cleanup affects containers
56
+ gradle: true,
57
+ "universal-binary": false, // More conservative - modifies application binaries
58
+ },
59
+ safety: {
60
+ requireConfirmation: true,
61
+ dryRunDefault: false,
62
+ backupBeforeClearing: false,
63
+ excludeSystemCritical: true,
64
+ },
65
+ customPaths: [],
66
+ protectedPaths: [], // New property
67
+ output: {
68
+ verbose: false,
69
+ showSizes: true,
70
+ useColors: true,
71
+ emojis: "on",
72
+ },
73
+ };
74
+ // Simple file-based config store (replaces 'conf' package)
75
+ function getConfigDir() {
76
+ const platform = process.platform;
77
+ const homeDir = os_1.default.homedir();
78
+ if (platform === "win32") {
79
+ return path_1.default.join(process.env.APPDATA || path_1.default.join(homeDir, "AppData", "Roaming"), "squeaky-clean");
80
+ }
81
+ else if (platform === "darwin") {
82
+ return path_1.default.join(homeDir, "Library", "Preferences", "squeaky-clean");
83
+ }
84
+ else {
85
+ // Linux/Unix - follow XDG spec
86
+ return path_1.default.join(process.env.XDG_CONFIG_HOME || path_1.default.join(homeDir, ".config"), "squeaky-clean");
87
+ }
88
+ }
89
+ function ensureConfigDir(configDir) {
90
+ if (!fs_1.default.existsSync(configDir)) {
91
+ fs_1.default.mkdirSync(configDir, { recursive: true });
92
+ }
93
+ }
94
+ class ConfigManager {
95
+ constructor() {
96
+ this.customConfig = null;
97
+ this.customConfigPath = null;
98
+ const configDir = getConfigDir();
99
+ this.configPath = path_1.default.join(configDir, "config.json");
100
+ this.store = this.loadStore();
101
+ }
102
+ loadStore() {
103
+ try {
104
+ if (fs_1.default.existsSync(this.configPath)) {
105
+ const raw = fs_1.default.readFileSync(this.configPath, "utf-8");
106
+ const parsed = JSON.parse(raw);
107
+ return this.deepMerge(exports.defaultConfig, parsed);
108
+ }
109
+ }
110
+ catch {
111
+ // Corrupted config - use defaults
112
+ }
113
+ return { ...exports.defaultConfig };
114
+ }
115
+ saveStore() {
116
+ try {
117
+ ensureConfigDir(path_1.default.dirname(this.configPath));
118
+ fs_1.default.writeFileSync(this.configPath, JSON.stringify(this.store, null, 2));
119
+ }
120
+ catch {
121
+ // Ignore write errors (e.g., in tests or sandboxed environments)
122
+ }
123
+ }
124
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
125
+ deepMerge(base, override) {
126
+ if (!override || typeof override !== "object")
127
+ return base;
128
+ if (Array.isArray(override))
129
+ return override;
130
+ const result = { ...base };
131
+ for (const key of Object.keys(override)) {
132
+ const val = override[key];
133
+ if (val !== undefined && val !== null && typeof val === "object" && !Array.isArray(val)) {
134
+ result[key] = this.deepMerge(base[key] || {}, val);
135
+ }
136
+ else if (val !== undefined) {
137
+ result[key] = val;
138
+ }
139
+ }
140
+ return result;
141
+ }
142
+ loadCustomConfig(configPath) {
143
+ try {
144
+ const resolvedPath = path_1.default.resolve(configPath);
145
+ if (!fs_1.default.existsSync(resolvedPath)) {
146
+ throw new Error(`Config file not found: ${resolvedPath}`);
147
+ }
148
+ const configContent = fs_1.default.readFileSync(resolvedPath, "utf-8");
149
+ this.customConfig = JSON.parse(configContent);
150
+ this.customConfigPath = resolvedPath;
151
+ }
152
+ catch (error) {
153
+ throw new Error(`Failed to load config from ${configPath}: ${error}`);
154
+ }
155
+ }
156
+ get() {
157
+ // If custom config is loaded, return it instead of the default
158
+ if (this.customConfig) {
159
+ return this.customConfig;
160
+ }
161
+ return this.store;
162
+ }
163
+ set(config) {
164
+ if (this.customConfig) {
165
+ // Update custom config in memory (but don't save to file)
166
+ this.customConfig = { ...this.customConfig, ...config };
167
+ }
168
+ else {
169
+ this.store = this.deepMerge(this.store, config);
170
+ this.saveStore();
171
+ }
172
+ }
173
+ reset() {
174
+ if (this.customConfig) {
175
+ this.customConfig = null;
176
+ this.customConfigPath = null;
177
+ }
178
+ else {
179
+ this.store = { ...exports.defaultConfig };
180
+ try {
181
+ if (fs_1.default.existsSync(this.configPath)) {
182
+ fs_1.default.unlinkSync(this.configPath);
183
+ }
184
+ }
185
+ catch {
186
+ // Ignore errors during reset
187
+ }
188
+ }
189
+ }
190
+ getConfigPath() {
191
+ if (this.customConfigPath) {
192
+ return this.customConfigPath;
193
+ }
194
+ return this.configPath;
195
+ }
196
+ // Specific getters for convenience
197
+ isToolEnabled(tool) {
198
+ const config = this.get();
199
+ return config.tools?.[tool] ?? exports.defaultConfig.tools[tool];
200
+ }
201
+ isCacheTypeEnabled(type) {
202
+ const config = this.get();
203
+ return config.enabledCaches?.[type] ?? exports.defaultConfig.enabledCaches[type];
204
+ }
205
+ shouldRequireConfirmation() {
206
+ const config = this.get();
207
+ return (config.safety?.requireConfirmation ??
208
+ exports.defaultConfig.safety.requireConfirmation);
209
+ }
210
+ shouldUseDryRunDefault() {
211
+ const config = this.get();
212
+ return config.safety?.dryRunDefault ?? exports.defaultConfig.safety.dryRunDefault;
213
+ }
214
+ shouldShowSizes() {
215
+ const config = this.get();
216
+ return config.output?.showSizes ?? exports.defaultConfig.output.showSizes;
217
+ }
218
+ shouldUseColors() {
219
+ const config = this.get();
220
+ return config.output?.useColors ?? exports.defaultConfig.output.useColors;
221
+ }
222
+ isVerbose() {
223
+ const config = this.get();
224
+ return config.output?.verbose ?? exports.defaultConfig.output.verbose;
225
+ }
226
+ getEmojiMode() {
227
+ const config = this.get();
228
+ const output = config.output;
229
+ return output?.emojis ?? exports.defaultConfig.output.emojis;
230
+ }
231
+ getCustomPaths() {
232
+ const config = this.get();
233
+ return config.customPaths ?? exports.defaultConfig.customPaths;
234
+ }
235
+ getProtectedPaths() {
236
+ const config = this.get();
237
+ return config.protectedPaths ?? [];
238
+ }
239
+ /**
240
+ * Check if fun mode is enabled via environment variable.
241
+ * SQUEAKY_FUN_MODE=1 enables, SQUEAKY_FUN_MODE=0 disables.
242
+ */
243
+ isFunModeEnabled() {
244
+ const envValue = process.env.SQUEAKY_FUN_MODE;
245
+ if (envValue === "0")
246
+ return false;
247
+ if (envValue === "1")
248
+ return true;
249
+ // Default to true if not explicitly set
250
+ return true;
251
+ }
252
+ }
253
+ exports.ConfigManager = ConfigManager;
254
+ exports.config = new ConfigManager();
255
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type SqueakyConfig = Record<string, any>;
2
+ export declare function loadJson(filePath: string): Promise<any>;
3
+ export declare function expandEnv(str: string): string;
4
+ export declare function deepMerge<T>(base: T, next: Partial<T>): T;
5
+ export declare function resolveExtendsChain(entries: string | string[] | undefined, fromPath: string): Promise<any[]>;
6
+ export declare function loadAndValidateConfig(configPath: string): Promise<SqueakyConfig>;
7
+ //# sourceMappingURL=loadConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadConfig.d.ts","sourceRoot":"","sources":["../../src/config/loadConfig.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhD,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAG7D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM7C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAUzD;AAmBD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,EACtC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,GAAG,EAAE,CAAC,CAWhB;AAED,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,CAAC,CA+BxB"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ // src/config/loadConfig.ts
3
+ // uses zod for schema validation
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.loadJson = loadJson;
9
+ exports.expandEnv = expandEnv;
10
+ exports.deepMerge = deepMerge;
11
+ exports.resolveExtendsChain = resolveExtendsChain;
12
+ exports.loadAndValidateConfig = loadAndValidateConfig;
13
+ const node_fs_1 = __importDefault(require("node:fs"));
14
+ const node_path_1 = __importDefault(require("node:path"));
15
+ const configSchema_1 = require("./configSchema");
16
+ async function loadJson(filePath) {
17
+ const raw = await node_fs_1.default.promises.readFile(filePath, "utf8");
18
+ return JSON.parse(raw);
19
+ }
20
+ function expandEnv(str) {
21
+ // Supports ${VAR} and tilde
22
+ const tilde = str.startsWith("~")
23
+ ? str.replace(/^~(?=\/|$)/, process.env.HOME || "~")
24
+ : str;
25
+ return tilde.replace(/\$\{([^}]+)\}/g, (_, key) => process.env[key] ?? "");
26
+ }
27
+ function deepMerge(base, next) {
28
+ if (Array.isArray(base) && Array.isArray(next))
29
+ return next;
30
+ if (typeof base === "object" && base && typeof next === "object" && next) {
31
+ const out = { ...base };
32
+ for (const [k, v] of Object.entries(next)) {
33
+ out[k] = k in out ? deepMerge(out[k], v) : v;
34
+ }
35
+ return out;
36
+ }
37
+ return next ?? base;
38
+ }
39
+ async function resolveMaybePackage(idOrPath, cwd) {
40
+ if (idOrPath.startsWith(".") ||
41
+ idOrPath.startsWith("/") ||
42
+ idOrPath.startsWith("~")) {
43
+ const expanded = expandEnv(idOrPath);
44
+ return node_path_1.default.isAbsolute(expanded) ? expanded : node_path_1.default.join(cwd, expanded);
45
+ }
46
+ // Try resolve from node_modules
47
+ const pkgPath = require.resolve(idOrPath, { paths: [cwd] });
48
+ return pkgPath;
49
+ }
50
+ async function resolveExtendsChain(entries, fromPath) {
51
+ if (!entries)
52
+ return [];
53
+ const cwd = node_path_1.default.dirname(fromPath);
54
+ const arr = Array.isArray(entries) ? entries : [entries];
55
+ const resolved = [];
56
+ for (const entry of arr) {
57
+ const target = await resolveMaybePackage(entry, cwd);
58
+ const json = await loadJson(target);
59
+ resolved.push({ json, source: target });
60
+ }
61
+ return resolved;
62
+ }
63
+ async function loadAndValidateConfig(configPath) {
64
+ const root = await loadJson(configPath);
65
+ // Expand env in string leafs
66
+ function expandLeaves(obj) {
67
+ if (typeof obj === "string")
68
+ return expandEnv(obj);
69
+ if (Array.isArray(obj))
70
+ return obj.map(expandLeaves);
71
+ if (obj && typeof obj === "object") {
72
+ const out = {};
73
+ for (const [k, v] of Object.entries(obj))
74
+ out[k] = expandLeaves(v);
75
+ return out;
76
+ }
77
+ return obj;
78
+ }
79
+ // Resolve extends -> merge left-to-right, then merge root last
80
+ const chain = await resolveExtendsChain(root.extends, configPath);
81
+ let merged = {};
82
+ for (const link of chain)
83
+ merged = deepMerge(merged, expandLeaves(link.json));
84
+ merged = deepMerge(merged, expandLeaves(root));
85
+ // Validate with zod
86
+ const validation = (0, configSchema_1.validateMixedConfig)(merged);
87
+ if (!validation.success) {
88
+ const errors = (validation.errors || []).join("\n");
89
+ const err = new Error(`Invalid config: \n${errors}`);
90
+ err.errors = validation.errors;
91
+ throw err;
92
+ }
93
+ return merged;
94
+ }
95
+ //# sourceMappingURL=loadConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadConfig.js","sourceRoot":"","sources":["../../src/config/loadConfig.ts"],"names":[],"mappings":";AAAA,2BAA2B;AAC3B,iCAAiC;;;;;AAQjC,4BAGC;AAED,8BAMC;AAED,8BAUC;AAmBD,kDAcC;AAED,sDAiCC;AAjGD,sDAAyB;AACzB,0DAA6B;AAC7B,iDAAqD;AAI9C,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,MAAM,iBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,SAAS,CAAC,GAAW;IACnC,4BAA4B;IAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QAC/B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;QACpD,CAAC,CAAC,GAAG,CAAC;IACR,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,SAAS,CAAI,IAAO,EAAE,IAAgB;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAoB,CAAC;IAC5E,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,EAAE,CAAC;QACzE,MAAM,GAAG,GAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAQ,IAAU,IAAI,IAAI,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,QAAgB,EAChB,GAAW;IAEX,IACE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QACxB,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QACxB,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EACxB,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,mBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC;IACD,gCAAgC;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5D,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,mBAAmB,CACvC,OAAsC,EACtC,QAAgB;IAEhB,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAU,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,qBAAqB,CACzC,UAAkB;IAElB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IAExC,6BAA6B;IAC7B,SAAS,YAAY,CAAC,GAAQ;QAC5B,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,GAAG,GAAQ,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACnE,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,+DAA+D;IAC/D,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAClE,IAAI,MAAM,GAAQ,EAAE,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/C,oBAAoB;IACpB,MAAM,UAAU,GAAG,IAAA,kCAAmB,EAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC;QACpD,GAAW,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QACxC,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,56 @@
1
+ export type LegacyConfig = {
2
+ tools?: Record<string, any>;
3
+ auto?: {
4
+ enabled?: boolean;
5
+ schedule?: "daily" | "weekly" | "monthly";
6
+ dayOfWeek?: string | number;
7
+ time?: string;
8
+ sizeThreshold?: string;
9
+ args?: string[];
10
+ };
11
+ output?: {
12
+ verbose?: boolean;
13
+ useColors?: boolean;
14
+ };
15
+ extends?: string | string[];
16
+ [k: string]: any;
17
+ };
18
+ export type NewConfig = {
19
+ cleaners?: Record<string, any>;
20
+ scheduler?: {
21
+ enabled?: boolean;
22
+ frequency?: "daily" | "weekly" | "monthly";
23
+ dayOfWeek?: string | number;
24
+ time?: string;
25
+ args?: string[];
26
+ };
27
+ defaults?: {
28
+ dryRun?: boolean;
29
+ followSymlinks?: boolean;
30
+ restrictToHome?: boolean;
31
+ trash?: boolean;
32
+ concurrency?: number;
33
+ recentDays?: number;
34
+ sizeScan?: {
35
+ enableCache?: boolean;
36
+ cachePath?: string;
37
+ maxParallelFs?: number;
38
+ };
39
+ };
40
+ plugins?: {
41
+ enabled?: boolean;
42
+ scopes?: string[];
43
+ prefixes?: string[];
44
+ };
45
+ profiles?: Record<string, {
46
+ description?: string;
47
+ include?: string[];
48
+ exclude?: string[];
49
+ }>;
50
+ extends?: string | string[];
51
+ [k: string]: any;
52
+ };
53
+ export declare function isLegacyShape(json: any): boolean;
54
+ export declare function legacyToNew(json: LegacyConfig): NewConfig;
55
+ export declare function writeBackupAndSave(targetPath: string, newJson: object): string;
56
+ //# sourceMappingURL=migrateConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrateConfig.d.ts","sourceRoot":"","sources":["../../src/config/migrateConfig.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;QAC1C,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;QAC3C,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE;YACT,WAAW,CAAC,EAAE,OAAO,CAAC;YACtB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,aAAa,CAAC,EAAE,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;IACF,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACxE,QAAQ,CAAC,EAAE,MAAM,CACf,MAAM,EACN;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CACjE,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAEhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CA4EzD;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,MAAM,CAeR"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ // src/config/migrateConfig.ts
3
+ // Drop-in for: migrate/doctor
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.isLegacyShape = isLegacyShape;
9
+ exports.legacyToNew = legacyToNew;
10
+ exports.writeBackupAndSave = writeBackupAndSave;
11
+ const node_fs_1 = __importDefault(require("node:fs"));
12
+ const node_path_1 = __importDefault(require("node:path"));
13
+ function isLegacyShape(json) {
14
+ return !!(json && (json.tools || json.auto || json.output));
15
+ }
16
+ function legacyToNew(json) {
17
+ const out = {};
18
+ // Check if there are already new-style keys, give them precedence
19
+ const hasCleaners = json.cleaners && typeof json.cleaners === "object";
20
+ const hasScheduler = json.scheduler && typeof json.scheduler === "object";
21
+ const hasDefaults = json.defaults && typeof json.defaults === "object";
22
+ // 1) tools -> cleaners (only if cleaners doesn't already exist)
23
+ if (json.tools && typeof json.tools === "object" && !hasCleaners) {
24
+ out.cleaners = { ...json.tools };
25
+ }
26
+ else if (hasCleaners) {
27
+ out.cleaners = json.cleaners;
28
+ }
29
+ // 2) auto -> scheduler (only if scheduler doesn't already exist)
30
+ if (json.auto && typeof json.auto === "object" && !hasScheduler) {
31
+ out.scheduler = {
32
+ enabled: json.auto.enabled,
33
+ frequency: json.auto.schedule,
34
+ dayOfWeek: json.auto.dayOfWeek,
35
+ time: json.auto.time,
36
+ args: json.auto.args,
37
+ };
38
+ // If old configs used sizeThreshold, keep it as a hint flag on args
39
+ if (json.auto.sizeThreshold && out.scheduler) {
40
+ out.scheduler.args = [
41
+ ...(out.scheduler.args ?? []),
42
+ "--size-threshold",
43
+ String(json.auto.sizeThreshold),
44
+ ];
45
+ }
46
+ }
47
+ else if (hasScheduler) {
48
+ out.scheduler = json.scheduler;
49
+ }
50
+ // 3) output -> defaults (only if defaults doesn't already exist)
51
+ if (json.output && typeof json.output === "object" && !hasDefaults) {
52
+ out.defaults = {
53
+ // dryRun remains user-controlled; don't infer from verbose/useColors
54
+ // Carry nothing by default—these were UI prefs. If you prefer, you can stash them:
55
+ // keep legacy UI hints
56
+ _legacyOutput: json.output,
57
+ };
58
+ }
59
+ else if (hasDefaults) {
60
+ out.defaults = json.defaults;
61
+ }
62
+ // 4) passthrough: extends/plugins/profiles if already present
63
+ if (json.extends)
64
+ out.extends = json.extends;
65
+ if (json.plugins)
66
+ out.plugins = json.plugins;
67
+ if (json.profiles)
68
+ out.profiles = json.profiles;
69
+ // 5) bring forward unknown top-level keys as-is (non-invasive)
70
+ for (const [k, v] of Object.entries(json)) {
71
+ if ([
72
+ "tools",
73
+ "auto",
74
+ "output",
75
+ "extends",
76
+ "plugins",
77
+ "profiles",
78
+ "cleaners",
79
+ "scheduler",
80
+ "defaults",
81
+ ].includes(k))
82
+ continue;
83
+ if (!(k in out))
84
+ out[k] = v;
85
+ }
86
+ return out;
87
+ }
88
+ function writeBackupAndSave(targetPath, newJson) {
89
+ const dir = node_path_1.default.dirname(targetPath);
90
+ const base = node_path_1.default.basename(targetPath);
91
+ const stamp = new Date().toISOString().replace(/[:.]/g, "-");
92
+ const backup = node_path_1.default.join(dir, `${base}.backup.${stamp}.json`);
93
+ const pretty = (o) => JSON.stringify(o, null, 2);
94
+ // Backup original if exists
95
+ if (node_fs_1.default.existsSync(targetPath)) {
96
+ const src = node_fs_1.default.readFileSync(targetPath, "utf8");
97
+ node_fs_1.default.writeFileSync(backup, src, "utf8");
98
+ }
99
+ node_fs_1.default.writeFileSync(targetPath, pretty(newJson) + "\n", "utf8");
100
+ return backup;
101
+ }
102
+ //# sourceMappingURL=migrateConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrateConfig.js","sourceRoot":"","sources":["../../src/config/migrateConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface PluginInfo {
2
+ name: string;
3
+ path: string;
4
+ }
5
+ export declare function discoverPlugins(prefixes?: string[], scopes?: string[]): PluginInfo[];
6
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/plugins/discovery.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAuBD,wBAAgB,eAAe,CAC7B,QAAQ,GAAE,MAAM,EAAyB,EACzC,MAAM,GAAE,MAAM,EAAO,GACpB,UAAU,EAAE,CA8Bd"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ // src/plugins/discovery.ts
3
+ // finds squeaky packages (+ optional scoped prefixes) installed in current project or globally
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.discoverPlugins = discoverPlugins;
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const node_fs_1 = __importDefault(require("node:fs"));
11
+ function listNodeModulesRoots() {
12
+ const roots = new Set();
13
+ const cwd = process.cwd();
14
+ // Walk up looking for node_modules
15
+ let dir = cwd;
16
+ for (;;) {
17
+ const nm = node_path_1.default.join(dir, "node_modules");
18
+ if (node_fs_1.default.existsSync(nm))
19
+ roots.add(nm);
20
+ const parent = node_path_1.default.dirname(dir);
21
+ if (parent === dir)
22
+ break;
23
+ dir = parent;
24
+ }
25
+ // Add global npm prefix if present
26
+ if (process.env.npm_config_prefix) {
27
+ roots.add(node_path_1.default.join(process.env.npm_config_prefix, "lib", "node_modules"));
28
+ }
29
+ return Array.from(roots);
30
+ }
31
+ function discoverPlugins(prefixes = ["squeaky-cleaner-"], scopes = []) {
32
+ const roots = listNodeModulesRoots();
33
+ const found = [];
34
+ for (const root of roots) {
35
+ if (!node_fs_1.default.existsSync(root))
36
+ continue;
37
+ for (const entry of node_fs_1.default.readdirSync(root)) {
38
+ // scoped packages
39
+ if (entry.startsWith("@")) {
40
+ if (scopes.length && !scopes.includes(entry))
41
+ continue;
42
+ const scopeDir = node_path_1.default.join(root, entry);
43
+ if (!node_fs_1.default.existsSync(scopeDir))
44
+ continue;
45
+ for (const pkg of node_fs_1.default.readdirSync(scopeDir)) {
46
+ if (prefixes.some((p) => pkg.startsWith(p))) {
47
+ const pkgPath = node_path_1.default.join(scopeDir, pkg);
48
+ found.push({ name: `${entry}/${pkg}`, path: pkgPath });
49
+ }
50
+ }
51
+ }
52
+ else {
53
+ if (prefixes.some((p) => entry.startsWith(p))) {
54
+ const pkgPath = node_path_1.default.join(root, entry);
55
+ found.push({ name: entry, path: pkgPath });
56
+ }
57
+ }
58
+ }
59
+ }
60
+ // De-dup by name
61
+ const map = new Map(found.map((p) => [p.name, p]));
62
+ return Array.from(map.values());
63
+ }
64
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/plugins/discovery.ts"],"names":[],"mappings":"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"}