squeaky-clean 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +465 -0
- package/dist/cleaners/BaseCleaner.d.ts +57 -0
- package/dist/cleaners/BaseCleaner.d.ts.map +1 -0
- package/dist/cleaners/BaseCleaner.js +299 -0
- package/dist/cleaners/BaseCleaner.js.map +1 -0
- package/dist/cleaners/CleanerRegistry.d.ts +65 -0
- package/dist/cleaners/CleanerRegistry.d.ts.map +1 -0
- package/dist/cleaners/CleanerRegistry.js +112 -0
- package/dist/cleaners/CleanerRegistry.js.map +1 -0
- package/dist/cleaners/androidstudio.d.ts +16 -0
- package/dist/cleaners/androidstudio.d.ts.map +1 -0
- package/dist/cleaners/androidstudio.js +375 -0
- package/dist/cleaners/androidstudio.js.map +1 -0
- package/dist/cleaners/brew.d.ts +4 -0
- package/dist/cleaners/brew.d.ts.map +1 -0
- package/dist/cleaners/brew.js +197 -0
- package/dist/cleaners/brew.js.map +1 -0
- package/dist/cleaners/brewEnhanced.d.ts +18 -0
- package/dist/cleaners/brewEnhanced.d.ts.map +1 -0
- package/dist/cleaners/brewEnhanced.js +255 -0
- package/dist/cleaners/brewEnhanced.js.map +1 -0
- package/dist/cleaners/bun.d.ts +14 -0
- package/dist/cleaners/bun.d.ts.map +1 -0
- package/dist/cleaners/bun.js +207 -0
- package/dist/cleaners/bun.js.map +1 -0
- package/dist/cleaners/chrome.d.ts +14 -0
- package/dist/cleaners/chrome.d.ts.map +1 -0
- package/dist/cleaners/chrome.js +250 -0
- package/dist/cleaners/chrome.js.map +1 -0
- package/dist/cleaners/docker.d.ts +35 -0
- package/dist/cleaners/docker.d.ts.map +1 -0
- package/dist/cleaners/docker.js +285 -0
- package/dist/cleaners/docker.js.map +1 -0
- package/dist/cleaners/firefox.d.ts +15 -0
- package/dist/cleaners/firefox.d.ts.map +1 -0
- package/dist/cleaners/firefox.js +281 -0
- package/dist/cleaners/firefox.js.map +1 -0
- package/dist/cleaners/flutter.d.ts +18 -0
- package/dist/cleaners/flutter.d.ts.map +1 -0
- package/dist/cleaners/flutter.js +354 -0
- package/dist/cleaners/flutter.js.map +1 -0
- package/dist/cleaners/goBuild.d.ts +18 -0
- package/dist/cleaners/goBuild.d.ts.map +1 -0
- package/dist/cleaners/goBuild.js +196 -0
- package/dist/cleaners/goBuild.js.map +1 -0
- package/dist/cleaners/gradle.d.ts +14 -0
- package/dist/cleaners/gradle.d.ts.map +1 -0
- package/dist/cleaners/gradle.js +336 -0
- package/dist/cleaners/gradle.js.map +1 -0
- package/dist/cleaners/index.d.ts +51 -0
- package/dist/cleaners/index.d.ts.map +1 -0
- package/dist/cleaners/index.js +247 -0
- package/dist/cleaners/index.js.map +1 -0
- package/dist/cleaners/jetbrains.d.ts +18 -0
- package/dist/cleaners/jetbrains.d.ts.map +1 -0
- package/dist/cleaners/jetbrains.js +441 -0
- package/dist/cleaners/jetbrains.js.map +1 -0
- package/dist/cleaners/nix.d.ts +4 -0
- package/dist/cleaners/nix.d.ts.map +1 -0
- package/dist/cleaners/nix.js +227 -0
- package/dist/cleaners/nix.js.map +1 -0
- package/dist/cleaners/nodeGyp.d.ts +14 -0
- package/dist/cleaners/nodeGyp.d.ts.map +1 -0
- package/dist/cleaners/nodeGyp.js +157 -0
- package/dist/cleaners/nodeGyp.js.map +1 -0
- package/dist/cleaners/npm.d.ts +14 -0
- package/dist/cleaners/npm.d.ts.map +1 -0
- package/dist/cleaners/npm.js +198 -0
- package/dist/cleaners/npm.js.map +1 -0
- package/dist/cleaners/npmEnhanced.d.ts +19 -0
- package/dist/cleaners/npmEnhanced.d.ts.map +1 -0
- package/dist/cleaners/npmEnhanced.js +336 -0
- package/dist/cleaners/npmEnhanced.js.map +1 -0
- package/dist/cleaners/nx.d.ts +18 -0
- package/dist/cleaners/nx.d.ts.map +1 -0
- package/dist/cleaners/nx.js +308 -0
- package/dist/cleaners/nx.js.map +1 -0
- package/dist/cleaners/pip.d.ts +19 -0
- package/dist/cleaners/pip.d.ts.map +1 -0
- package/dist/cleaners/pip.js +334 -0
- package/dist/cleaners/pip.js.map +1 -0
- package/dist/cleaners/pnpm.d.ts +14 -0
- package/dist/cleaners/pnpm.d.ts.map +1 -0
- package/dist/cleaners/pnpm.js +209 -0
- package/dist/cleaners/pnpm.js.map +1 -0
- package/dist/cleaners/turbo.d.ts +18 -0
- package/dist/cleaners/turbo.d.ts.map +1 -0
- package/dist/cleaners/turbo.js +325 -0
- package/dist/cleaners/turbo.js.map +1 -0
- package/dist/cleaners/vite.d.ts +17 -0
- package/dist/cleaners/vite.d.ts.map +1 -0
- package/dist/cleaners/vite.js +274 -0
- package/dist/cleaners/vite.js.map +1 -0
- package/dist/cleaners/vscode.d.ts +14 -0
- package/dist/cleaners/vscode.d.ts.map +1 -0
- package/dist/cleaners/vscode.js +354 -0
- package/dist/cleaners/vscode.js.map +1 -0
- package/dist/cleaners/webpack.d.ts +17 -0
- package/dist/cleaners/webpack.d.ts.map +1 -0
- package/dist/cleaners/webpack.js +263 -0
- package/dist/cleaners/webpack.js.map +1 -0
- package/dist/cleaners/xcode.d.ts +14 -0
- package/dist/cleaners/xcode.d.ts.map +1 -0
- package/dist/cleaners/xcode.js +348 -0
- package/dist/cleaners/xcode.js.map +1 -0
- package/dist/cleaners/yarn.d.ts +16 -0
- package/dist/cleaners/yarn.d.ts.map +1 -0
- package/dist/cleaners/yarn.js +266 -0
- package/dist/cleaners/yarn.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +346 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/auto.d.ts +8 -0
- package/dist/commands/auto.d.ts.map +1 -0
- package/dist/commands/auto.js +224 -0
- package/dist/commands/auto.js.map +1 -0
- package/dist/commands/categories.d.ts +8 -0
- package/dist/commands/categories.d.ts.map +1 -0
- package/dist/commands/categories.js +133 -0
- package/dist/commands/categories.js.map +1 -0
- package/dist/commands/clean.d.ts +3 -0
- package/dist/commands/clean.d.ts.map +1 -0
- package/dist/commands/clean.js +149 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/config.d.ts +14 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +445 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/configDoctor.d.ts +26 -0
- package/dist/commands/configDoctor.d.ts.map +1 -0
- package/dist/commands/configDoctor.js +60 -0
- package/dist/commands/configDoctor.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +141 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/emojis.d.ts +2 -0
- package/dist/commands/emojis.d.ts.map +1 -0
- package/dist/commands/emojis.js +28 -0
- package/dist/commands/emojis.js.map +1 -0
- package/dist/commands/interactive.d.ts +3 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +284 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/commands/interactiveEnhanced.d.ts +4 -0
- package/dist/commands/interactiveEnhanced.d.ts.map +1 -0
- package/dist/commands/interactiveEnhanced.js +460 -0
- package/dist/commands/interactiveEnhanced.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +68 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/sizes.d.ts +2 -0
- package/dist/commands/sizes.d.ts.map +1 -0
- package/dist/commands/sizes.js +87 -0
- package/dist/commands/sizes.js.map +1 -0
- package/dist/config/index.d.ts +26 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +228 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loadConfig.d.ts +7 -0
- package/dist/config/loadConfig.d.ts.map +1 -0
- package/dist/config/loadConfig.js +103 -0
- package/dist/config/loadConfig.js.map +1 -0
- package/dist/config/migrateConfig.d.ts +56 -0
- package/dist/config/migrateConfig.d.ts.map +1 -0
- package/dist/config/migrateConfig.js +102 -0
- package/dist/config/migrateConfig.js.map +1 -0
- package/dist/plugins/discovery.d.ts +6 -0
- package/dist/plugins/discovery.d.ts.map +1 -0
- package/dist/plugins/discovery.js +64 -0
- package/dist/plugins/discovery.js.map +1 -0
- package/dist/profiles/index.d.ts +61 -0
- package/dist/profiles/index.d.ts.map +1 -0
- package/dist/profiles/index.js +361 -0
- package/dist/profiles/index.js.map +1 -0
- package/dist/types/index.d.ts +161 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/cli.d.ts +44 -0
- package/dist/utils/cli.d.ts.map +1 -0
- package/dist/utils/cli.js +407 -0
- package/dist/utils/cli.js.map +1 -0
- package/dist/utils/fs.d.ts +15 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +218 -0
- package/dist/utils/fs.js.map +1 -0
- package/package.json +122 -0
|
@@ -0,0 +1,87 @@
|
|
|
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.sizesCommand = sizesCommand;
|
|
7
|
+
const cli_1 = require("../utils/cli");
|
|
8
|
+
const cleaners_1 = require("../cleaners");
|
|
9
|
+
const ora_1 = __importDefault(require("ora"));
|
|
10
|
+
async function sizesCommand(_options) {
|
|
11
|
+
try {
|
|
12
|
+
(0, cli_1.printInfo)(`${cli_1.symbols.soap} Cache Sizes`);
|
|
13
|
+
(0, cli_1.printInfo)("──────────────");
|
|
14
|
+
const spinner = (0, ora_1.default)("Scanning cache directories...").start();
|
|
15
|
+
try {
|
|
16
|
+
const cacheInfos = await cleaners_1.cacheManager.getAllCacheInfo();
|
|
17
|
+
spinner.stop();
|
|
18
|
+
console.log(); // Add some space
|
|
19
|
+
let totalSize = 0;
|
|
20
|
+
let foundCaches = 0;
|
|
21
|
+
// Group by cache type
|
|
22
|
+
const groupedCaches = new Map();
|
|
23
|
+
for (const info of cacheInfos) {
|
|
24
|
+
const type = info.type || "other";
|
|
25
|
+
if (!groupedCaches.has(type)) {
|
|
26
|
+
groupedCaches.set(type, []);
|
|
27
|
+
}
|
|
28
|
+
groupedCaches.get(type).push(info);
|
|
29
|
+
}
|
|
30
|
+
// Display results grouped by type
|
|
31
|
+
const typeEmojis = {
|
|
32
|
+
"package-manager": "📦",
|
|
33
|
+
"build-tool": "🔧",
|
|
34
|
+
ide: "💻",
|
|
35
|
+
browser: "🌐",
|
|
36
|
+
system: "⚙️",
|
|
37
|
+
other: "📁",
|
|
38
|
+
};
|
|
39
|
+
const typeNames = {
|
|
40
|
+
"package-manager": "Package Managers",
|
|
41
|
+
"build-tool": "Build Tools",
|
|
42
|
+
ide: "Development Environments",
|
|
43
|
+
browser: "Browsers",
|
|
44
|
+
system: "System Tools",
|
|
45
|
+
other: "Other",
|
|
46
|
+
};
|
|
47
|
+
for (const [type, infos] of groupedCaches) {
|
|
48
|
+
const emoji = typeEmojis[type] || "📁";
|
|
49
|
+
const typeName = typeNames[type] || type;
|
|
50
|
+
console.log(`${emoji} ${typeName}`);
|
|
51
|
+
for (const info of infos) {
|
|
52
|
+
if (info.size && info.size > 0) {
|
|
53
|
+
const sizeFormatted = (0, cli_1.formatSizeWithColor)(info.size);
|
|
54
|
+
(0, cli_1.printSuccess)(` ✅ ${info.name}: ${sizeFormatted}`);
|
|
55
|
+
totalSize += info.size;
|
|
56
|
+
foundCaches++;
|
|
57
|
+
}
|
|
58
|
+
else if (info.paths && info.paths.length > 0) {
|
|
59
|
+
(0, cli_1.printInfo)(` ⚪ ${info.name}: No cache data found`);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
(0, cli_1.printInfo)(` ❌ ${info.name}: Not available`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
console.log(); // Space between groups
|
|
66
|
+
}
|
|
67
|
+
// Summary
|
|
68
|
+
if (foundCaches > 0) {
|
|
69
|
+
const totalFormatted = (0, cli_1.formatSizeWithColor)(totalSize);
|
|
70
|
+
(0, cli_1.printSuccess)(`📊 Total cache size: ${totalFormatted} across ${foundCaches} cache${foundCaches > 1 ? "s" : ""}`);
|
|
71
|
+
(0, cli_1.printInfo)(`💡 Use 'squeaky clean --dry-run' to see what can be cleaned`);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
(0, cli_1.printInfo)("No cache data found. This might mean caches are already clean or tools aren't installed.");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
spinner.fail("Failed to scan cache directories");
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
(0, cli_1.printError)(`Sizes command error: ${error}`);
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=sizes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sizes.js","sourceRoot":"","sources":["../../src/commands/sizes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { UserConfig } from "../types";
|
|
2
|
+
export declare const defaultConfig: UserConfig;
|
|
3
|
+
declare class ConfigManager {
|
|
4
|
+
private conf;
|
|
5
|
+
private customConfig;
|
|
6
|
+
private customConfigPath;
|
|
7
|
+
constructor();
|
|
8
|
+
loadCustomConfig(configPath: string): void;
|
|
9
|
+
get(): UserConfig;
|
|
10
|
+
set(config: Partial<UserConfig>): void;
|
|
11
|
+
reset(): void;
|
|
12
|
+
getConfigPath(): string;
|
|
13
|
+
isToolEnabled(tool: keyof UserConfig["tools"]): boolean;
|
|
14
|
+
isCacheTypeEnabled(type: keyof UserConfig["enabledCaches"]): boolean;
|
|
15
|
+
shouldRequireConfirmation(): boolean;
|
|
16
|
+
shouldUseDryRunDefault(): boolean;
|
|
17
|
+
shouldShowSizes(): boolean;
|
|
18
|
+
shouldUseColors(): boolean;
|
|
19
|
+
isVerbose(): boolean;
|
|
20
|
+
getEmojiMode(): "on" | "off" | "minimal";
|
|
21
|
+
getCustomPaths(): string[];
|
|
22
|
+
getProtectedPaths(): string[];
|
|
23
|
+
}
|
|
24
|
+
export declare const config: ConfigManager;
|
|
25
|
+
export { ConfigManager };
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAItC,eAAO,MAAM,aAAa,EAAE,UAwD3B,CAAC;AAEF,cAAM,aAAa;IACjB,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,gBAAgB,CAAuB;;IAkF/C,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAe1C,GAAG,IAAI,UAAU;IAQjB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAStC,KAAK,IAAI,IAAI;IASb,aAAa,IAAI,MAAM;IAQvB,aAAa,CAAC,IAAI,EAAE,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO;IAKvD,kBAAkB,CAAC,IAAI,EAAE,MAAM,UAAU,CAAC,eAAe,CAAC,GAAG,OAAO;IAKpE,yBAAyB,IAAI,OAAO;IAQpC,sBAAsB,IAAI,OAAO;IAKjC,eAAe,IAAI,OAAO;IAK1B,eAAe,IAAI,OAAO;IAK1B,SAAS,IAAI,OAAO;IAKpB,YAAY,IAAI,IAAI,GAAG,KAAK,GAAG,SAAS;IAMxC,cAAc,IAAI,MAAM,EAAE;IAK1B,iBAAiB,IAAI,MAAM,EAAE;CAI9B;AAED,eAAO,MAAM,MAAM,eAAsB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,228 @@
|
|
|
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 conf_1 = __importDefault(require("conf"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
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, // Python pip caches are generally safe to clear
|
|
25
|
+
// Build tools
|
|
26
|
+
webpack: true,
|
|
27
|
+
vite: true,
|
|
28
|
+
nx: true,
|
|
29
|
+
turbo: true,
|
|
30
|
+
flutter: true, // Flutter caches are safe and can be large
|
|
31
|
+
// Browsers
|
|
32
|
+
chrome: false, // More conservative - browser caches can affect user experience
|
|
33
|
+
firefox: false,
|
|
34
|
+
// IDEs
|
|
35
|
+
vscode: true, // VS Code caches are generally safe to clear
|
|
36
|
+
xcode: true, // Xcode can accumulate huge caches
|
|
37
|
+
androidstudio: true, // Android Studio caches are safe and can be large
|
|
38
|
+
jetbrains: false, // More conservative for JetBrains IDEs
|
|
39
|
+
// System tools
|
|
40
|
+
docker: false, // More conservative - Docker cleanup affects containers
|
|
41
|
+
gradle: true, // Gradle caches are safe and can be large
|
|
42
|
+
maven: true, // Maven caches are safe and can be large
|
|
43
|
+
},
|
|
44
|
+
safety: {
|
|
45
|
+
requireConfirmation: true,
|
|
46
|
+
dryRunDefault: false,
|
|
47
|
+
backupBeforeClearing: false,
|
|
48
|
+
excludeSystemCritical: true,
|
|
49
|
+
},
|
|
50
|
+
customPaths: [],
|
|
51
|
+
protectedPaths: [], // New property
|
|
52
|
+
output: {
|
|
53
|
+
verbose: false,
|
|
54
|
+
showSizes: true,
|
|
55
|
+
useColors: true,
|
|
56
|
+
emojis: "on",
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
class ConfigManager {
|
|
60
|
+
constructor() {
|
|
61
|
+
this.customConfig = null;
|
|
62
|
+
this.customConfigPath = null;
|
|
63
|
+
this.conf = new conf_1.default({
|
|
64
|
+
projectName: "squeaky-clean",
|
|
65
|
+
projectVersion: "1.0.0",
|
|
66
|
+
defaults: exports.defaultConfig,
|
|
67
|
+
schema: {
|
|
68
|
+
enabledCaches: {
|
|
69
|
+
type: "object",
|
|
70
|
+
properties: {
|
|
71
|
+
packageManagers: { type: "boolean" },
|
|
72
|
+
buildTools: { type: "boolean" },
|
|
73
|
+
browsers: { type: "boolean" },
|
|
74
|
+
ides: { type: "boolean" },
|
|
75
|
+
system: { type: "boolean" },
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
tools: {
|
|
79
|
+
type: "object",
|
|
80
|
+
properties: {
|
|
81
|
+
// Package managers
|
|
82
|
+
npm: { type: "boolean" },
|
|
83
|
+
yarn: { type: "boolean" },
|
|
84
|
+
pnpm: { type: "boolean" },
|
|
85
|
+
bun: { type: "boolean" },
|
|
86
|
+
pip: { type: "boolean" },
|
|
87
|
+
// Build tools
|
|
88
|
+
webpack: { type: "boolean" },
|
|
89
|
+
vite: { type: "boolean" },
|
|
90
|
+
nx: { type: "boolean" },
|
|
91
|
+
turbo: { type: "boolean" },
|
|
92
|
+
flutter: { type: "boolean" },
|
|
93
|
+
// Browsers
|
|
94
|
+
chrome: { type: "boolean" },
|
|
95
|
+
firefox: { type: "boolean" },
|
|
96
|
+
// IDEs
|
|
97
|
+
vscode: { type: "boolean" },
|
|
98
|
+
xcode: { type: "boolean" },
|
|
99
|
+
androidstudio: { type: "boolean" },
|
|
100
|
+
jetbrains: { type: "boolean" },
|
|
101
|
+
// System tools
|
|
102
|
+
docker: { type: "boolean" },
|
|
103
|
+
gradle: { type: "boolean" },
|
|
104
|
+
maven: { type: "boolean" },
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
safety: {
|
|
108
|
+
type: "object",
|
|
109
|
+
properties: {
|
|
110
|
+
requireConfirmation: { type: "boolean" },
|
|
111
|
+
dryRunDefault: { type: "boolean" },
|
|
112
|
+
backupBeforeClearing: { type: "boolean" },
|
|
113
|
+
excludeSystemCritical: { type: "boolean" },
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
customPaths: {
|
|
117
|
+
type: "array",
|
|
118
|
+
items: { type: "string" },
|
|
119
|
+
},
|
|
120
|
+
protectedPaths: {
|
|
121
|
+
// New property
|
|
122
|
+
type: "array",
|
|
123
|
+
items: { type: "string" },
|
|
124
|
+
},
|
|
125
|
+
output: {
|
|
126
|
+
type: "object",
|
|
127
|
+
properties: {
|
|
128
|
+
verbose: { type: "boolean" },
|
|
129
|
+
showSizes: { type: "boolean" },
|
|
130
|
+
useColors: { type: "boolean" },
|
|
131
|
+
emojis: { type: "string", enum: ["on", "off", "minimal"] },
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
loadCustomConfig(configPath) {
|
|
138
|
+
try {
|
|
139
|
+
const resolvedPath = path_1.default.resolve(configPath);
|
|
140
|
+
if (!fs_1.default.existsSync(resolvedPath)) {
|
|
141
|
+
throw new Error(`Config file not found: ${resolvedPath}`);
|
|
142
|
+
}
|
|
143
|
+
const configContent = fs_1.default.readFileSync(resolvedPath, "utf-8");
|
|
144
|
+
this.customConfig = JSON.parse(configContent);
|
|
145
|
+
this.customConfigPath = resolvedPath;
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
throw new Error(`Failed to load config from ${configPath}: ${error}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
get() {
|
|
152
|
+
// If custom config is loaded, return it instead of the default
|
|
153
|
+
if (this.customConfig) {
|
|
154
|
+
return this.customConfig;
|
|
155
|
+
}
|
|
156
|
+
return this.conf.store;
|
|
157
|
+
}
|
|
158
|
+
set(config) {
|
|
159
|
+
if (this.customConfig) {
|
|
160
|
+
// Update custom config in memory (but don't save to file)
|
|
161
|
+
this.customConfig = { ...this.customConfig, ...config };
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
this.conf.set(config);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
reset() {
|
|
168
|
+
if (this.customConfig) {
|
|
169
|
+
this.customConfig = null;
|
|
170
|
+
this.customConfigPath = null;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
this.conf.clear();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
getConfigPath() {
|
|
177
|
+
if (this.customConfigPath) {
|
|
178
|
+
return this.customConfigPath;
|
|
179
|
+
}
|
|
180
|
+
return this.conf.path;
|
|
181
|
+
}
|
|
182
|
+
// Specific getters for convenience
|
|
183
|
+
isToolEnabled(tool) {
|
|
184
|
+
const config = this.get();
|
|
185
|
+
return config.tools?.[tool] ?? exports.defaultConfig.tools[tool];
|
|
186
|
+
}
|
|
187
|
+
isCacheTypeEnabled(type) {
|
|
188
|
+
const config = this.get();
|
|
189
|
+
return config.enabledCaches?.[type] ?? exports.defaultConfig.enabledCaches[type];
|
|
190
|
+
}
|
|
191
|
+
shouldRequireConfirmation() {
|
|
192
|
+
const config = this.get();
|
|
193
|
+
return (config.safety?.requireConfirmation ??
|
|
194
|
+
exports.defaultConfig.safety.requireConfirmation);
|
|
195
|
+
}
|
|
196
|
+
shouldUseDryRunDefault() {
|
|
197
|
+
const config = this.get();
|
|
198
|
+
return config.safety?.dryRunDefault ?? exports.defaultConfig.safety.dryRunDefault;
|
|
199
|
+
}
|
|
200
|
+
shouldShowSizes() {
|
|
201
|
+
const config = this.get();
|
|
202
|
+
return config.output?.showSizes ?? exports.defaultConfig.output.showSizes;
|
|
203
|
+
}
|
|
204
|
+
shouldUseColors() {
|
|
205
|
+
const config = this.get();
|
|
206
|
+
return config.output?.useColors ?? exports.defaultConfig.output.useColors;
|
|
207
|
+
}
|
|
208
|
+
isVerbose() {
|
|
209
|
+
const config = this.get();
|
|
210
|
+
return config.output?.verbose ?? exports.defaultConfig.output.verbose;
|
|
211
|
+
}
|
|
212
|
+
getEmojiMode() {
|
|
213
|
+
const config = this.get();
|
|
214
|
+
const output = config.output;
|
|
215
|
+
return output?.emojis ?? exports.defaultConfig.output.emojis;
|
|
216
|
+
}
|
|
217
|
+
getCustomPaths() {
|
|
218
|
+
const config = this.get();
|
|
219
|
+
return config.customPaths ?? exports.defaultConfig.customPaths;
|
|
220
|
+
}
|
|
221
|
+
getProtectedPaths() {
|
|
222
|
+
const config = this.get();
|
|
223
|
+
return config.protectedPaths ?? [];
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
exports.ConfigManager = ConfigManager;
|
|
227
|
+
exports.config = new ConfigManager();
|
|
228
|
+
//# 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":"AAWA,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,CAoCxB"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// src/config/loadConfig.ts
|
|
3
|
+
// uses Ajv 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 ajv_1 = __importDefault(require("ajv"));
|
|
16
|
+
const ajv_formats_1 = __importDefault(require("ajv-formats"));
|
|
17
|
+
const ajv = new ajv_1.default({ allErrors: true, strict: true, allowUnionTypes: true });
|
|
18
|
+
(0, ajv_formats_1.default)(ajv);
|
|
19
|
+
async function loadJson(filePath) {
|
|
20
|
+
const raw = await node_fs_1.default.promises.readFile(filePath, "utf8");
|
|
21
|
+
return JSON.parse(raw);
|
|
22
|
+
}
|
|
23
|
+
function expandEnv(str) {
|
|
24
|
+
// Supports ${VAR} and tilde
|
|
25
|
+
const tilde = str.startsWith("~")
|
|
26
|
+
? str.replace(/^~(?=\/|$)/, process.env.HOME || "~")
|
|
27
|
+
: str;
|
|
28
|
+
return tilde.replace(/\$\{([^}]+)\}/g, (_, key) => process.env[key] ?? "");
|
|
29
|
+
}
|
|
30
|
+
function deepMerge(base, next) {
|
|
31
|
+
if (Array.isArray(base) && Array.isArray(next))
|
|
32
|
+
return next;
|
|
33
|
+
if (typeof base === "object" && base && typeof next === "object" && next) {
|
|
34
|
+
const out = { ...base };
|
|
35
|
+
for (const [k, v] of Object.entries(next)) {
|
|
36
|
+
out[k] = k in out ? deepMerge(out[k], v) : v;
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
return next ?? base;
|
|
41
|
+
}
|
|
42
|
+
async function resolveMaybePackage(idOrPath, cwd) {
|
|
43
|
+
if (idOrPath.startsWith(".") ||
|
|
44
|
+
idOrPath.startsWith("/") ||
|
|
45
|
+
idOrPath.startsWith("~")) {
|
|
46
|
+
const expanded = expandEnv(idOrPath);
|
|
47
|
+
return node_path_1.default.isAbsolute(expanded) ? expanded : node_path_1.default.join(cwd, expanded);
|
|
48
|
+
}
|
|
49
|
+
// Try resolve from node_modules
|
|
50
|
+
const pkgPath = require.resolve(idOrPath, { paths: [cwd] });
|
|
51
|
+
return pkgPath;
|
|
52
|
+
}
|
|
53
|
+
async function resolveExtendsChain(entries, fromPath) {
|
|
54
|
+
if (!entries)
|
|
55
|
+
return [];
|
|
56
|
+
const cwd = node_path_1.default.dirname(fromPath);
|
|
57
|
+
const arr = Array.isArray(entries) ? entries : [entries];
|
|
58
|
+
const resolved = [];
|
|
59
|
+
for (const entry of arr) {
|
|
60
|
+
const target = await resolveMaybePackage(entry, cwd);
|
|
61
|
+
const json = await loadJson(target);
|
|
62
|
+
resolved.push({ json, source: target });
|
|
63
|
+
}
|
|
64
|
+
return resolved;
|
|
65
|
+
}
|
|
66
|
+
async function loadAndValidateConfig(configPath) {
|
|
67
|
+
const schemaPath = node_path_1.default.join(process.cwd(), "schemas/config.schema.json");
|
|
68
|
+
const schema = await loadJson(schemaPath);
|
|
69
|
+
const validate = ajv.compile(schema);
|
|
70
|
+
const root = await loadJson(configPath);
|
|
71
|
+
// Expand env in string leafs (shallow pass; paths/args/etc)
|
|
72
|
+
function expandLeaves(obj) {
|
|
73
|
+
if (typeof obj === "string")
|
|
74
|
+
return expandEnv(obj);
|
|
75
|
+
if (Array.isArray(obj))
|
|
76
|
+
return obj.map(expandLeaves);
|
|
77
|
+
if (obj && typeof obj === "object") {
|
|
78
|
+
const out = {};
|
|
79
|
+
for (const [k, v] of Object.entries(obj))
|
|
80
|
+
out[k] = expandLeaves(v);
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
return obj;
|
|
84
|
+
}
|
|
85
|
+
// Resolve extends -> merge left-to-right, then merge root last
|
|
86
|
+
const chain = await resolveExtendsChain(root.extends, configPath);
|
|
87
|
+
let merged = {};
|
|
88
|
+
for (const link of chain)
|
|
89
|
+
merged = deepMerge(merged, expandLeaves(link.json));
|
|
90
|
+
merged = deepMerge(merged, expandLeaves(root));
|
|
91
|
+
// Validate final object
|
|
92
|
+
const ok = validate(merged);
|
|
93
|
+
if (!ok) {
|
|
94
|
+
const errors = validate.errors
|
|
95
|
+
.map((e) => `${e.instancePath} ${e.message}`)
|
|
96
|
+
.join("\n");
|
|
97
|
+
const err = new Error(`Invalid config: \n${errors}`);
|
|
98
|
+
err.errors = validate.errors;
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
101
|
+
return merged;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=loadConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadConfig.js","sourceRoot":"","sources":["../../src/config/loadConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|