squeaky-clean 0.4.18 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -0
- package/dist/cleaners/BaseCleaner.d.ts +1 -1
- package/dist/cleaners/BaseCleaner.d.ts.map +1 -1
- package/dist/cleaners/BaseCleaner.js +61 -16
- package/dist/cleaners/BaseCleaner.js.map +1 -1
- package/dist/cleaners/appCacheDiscovery.d.ts +35 -0
- package/dist/cleaners/appCacheDiscovery.d.ts.map +1 -0
- package/dist/cleaners/appCacheDiscovery.js +353 -0
- package/dist/cleaners/appCacheDiscovery.js.map +1 -0
- package/dist/cleaners/brew.d.ts.map +1 -1
- package/dist/cleaners/brew.js +9 -3
- package/dist/cleaners/brew.js.map +1 -1
- package/dist/cleaners/docker.d.ts.map +1 -1
- package/dist/cleaners/docker.js +8 -0
- package/dist/cleaners/docker.js.map +1 -1
- package/dist/cleaners/index.d.ts +2 -1
- package/dist/cleaners/index.d.ts.map +1 -1
- package/dist/cleaners/index.js +5 -3
- package/dist/cleaners/index.js.map +1 -1
- package/dist/cleaners/universalBinary.d.ts.map +1 -1
- package/dist/cleaners/universalBinary.js +7 -0
- package/dist/cleaners/universalBinary.js.map +1 -1
- package/dist/cleaners/vscode.d.ts.map +1 -1
- package/dist/cleaners/vscode.js +12 -3
- package/dist/cleaners/vscode.js.map +1 -1
- package/dist/cli.js +51 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/categories.d.ts.map +1 -1
- package/dist/commands/categories.js +9 -1
- package/dist/commands/categories.js.map +1 -1
- package/dist/commands/clean.d.ts +33 -1
- package/dist/commands/clean.d.ts.map +1 -1
- package/dist/commands/clean.js +264 -0
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/interactive.d.ts.map +1 -1
- package/dist/commands/interactive.js +24 -2
- package/dist/commands/interactive.js.map +1 -1
- package/dist/commands/profile.d.ts +7 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +61 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +9 -1
- package/dist/config/index.js.map +1 -1
- package/dist/safety/index.d.ts +47 -0
- package/dist/safety/index.d.ts.map +1 -0
- package/dist/safety/index.js +115 -0
- package/dist/safety/index.js.map +1 -0
- package/dist/safety/rules.d.ts +27 -0
- package/dist/safety/rules.d.ts.map +1 -0
- package/dist/safety/rules.js +465 -0
- package/dist/safety/rules.js.map +1 -0
- package/dist/types/index.d.ts +10 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/fs.d.ts +2 -2
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +56 -22
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/which.d.ts.map +1 -1
- package/dist/utils/which.js +3 -0
- package/dist/utils/which.js.map +1 -1
- package/package.json +2 -1
package/dist/types/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export type SafetyTier = "safe" | "probably-safe" | "caution" | "manual";
|
|
1
2
|
export interface CacheCategory {
|
|
2
3
|
id: string;
|
|
3
4
|
name: string;
|
|
@@ -7,6 +8,7 @@ export interface CacheCategory {
|
|
|
7
8
|
lastAccessed?: Date;
|
|
8
9
|
lastModified?: Date;
|
|
9
10
|
priority: "critical" | "important" | "normal" | "low";
|
|
11
|
+
safety?: SafetyTier;
|
|
10
12
|
useCase: "development" | "testing" | "production" | "experimental" | "archived";
|
|
11
13
|
isProjectSpecific?: boolean;
|
|
12
14
|
projectPath?: string;
|
|
@@ -35,6 +37,8 @@ export interface CacheSelectionCriteria {
|
|
|
35
37
|
priorities?: Array<"critical" | "important" | "normal" | "low">;
|
|
36
38
|
projectSpecific?: boolean;
|
|
37
39
|
categories?: string[];
|
|
40
|
+
safetyTiers?: SafetyTier[];
|
|
41
|
+
allowManualIds?: string[];
|
|
38
42
|
}
|
|
39
43
|
export interface ClearResult {
|
|
40
44
|
name: string;
|
|
@@ -102,6 +106,7 @@ export interface UserConfig {
|
|
|
102
106
|
docker: boolean;
|
|
103
107
|
gradle: boolean;
|
|
104
108
|
"universal-binary": boolean;
|
|
109
|
+
"app-caches"?: boolean;
|
|
105
110
|
};
|
|
106
111
|
toolSettings?: {
|
|
107
112
|
[toolName: string]: ToolGranularSettings;
|
|
@@ -119,6 +124,7 @@ export interface UserConfig {
|
|
|
119
124
|
backupBeforeClearing: boolean;
|
|
120
125
|
excludeSystemCritical: boolean;
|
|
121
126
|
preserveActiveDevelopment?: boolean;
|
|
127
|
+
maxTier?: SafetyTier;
|
|
122
128
|
};
|
|
123
129
|
customPaths: string[];
|
|
124
130
|
output: {
|
|
@@ -151,7 +157,7 @@ export interface CleanerModule {
|
|
|
151
157
|
getCacheInfo: () => Promise<CacheInfo>;
|
|
152
158
|
getCacheCategories?: () => Promise<CacheCategory[]>;
|
|
153
159
|
clear: (dryRun?: boolean, criteria?: CacheSelectionCriteria, cacheInfo?: CacheInfo, protectedPaths?: string[]) => Promise<ClearResult>;
|
|
154
|
-
clearByCategory?: (categoryIds: string[], dryRun?: boolean, cacheInfo?: CacheInfo, protectedPaths?: string[]) => Promise<ClearResult>;
|
|
160
|
+
clearByCategory?: (categoryIds: string[], dryRun?: boolean, cacheInfo?: CacheInfo, protectedPaths?: string[], allowManualIds?: string[]) => Promise<ClearResult>;
|
|
155
161
|
}
|
|
156
162
|
export interface CommandOptions {
|
|
157
163
|
all?: boolean;
|
|
@@ -172,6 +178,9 @@ export interface CommandOptions {
|
|
|
172
178
|
showCategories?: boolean;
|
|
173
179
|
config?: boolean;
|
|
174
180
|
sizes?: boolean;
|
|
181
|
+
profile?: string;
|
|
182
|
+
safety?: string;
|
|
183
|
+
allowManual?: string[];
|
|
175
184
|
}
|
|
176
185
|
export interface CacheSizeInfo {
|
|
177
186
|
total: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/fs.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare function pathExists(filePath: string): Promise<boolean>;
|
|
2
2
|
/** Exported for tests: parse `du -sk` output ("<KB>\t<path>") into bytes. */
|
|
3
3
|
export declare function parseDuOutput(stdout: string): number | null;
|
|
4
|
-
export declare function getDirectorySize(dirPath: string, _skipLargeDirectories?: boolean): Promise<number>;
|
|
4
|
+
export declare function getDirectorySize(dirPath: string, _skipLargeDirectories?: boolean, timeoutMs?: number): Promise<number>;
|
|
5
5
|
export declare function getEstimatedDirectorySize(dirPath: string): Promise<number>;
|
|
6
6
|
export declare function safeRmrf(targetPath: string): Promise<void>;
|
|
7
7
|
export declare function createDirectoryIfNotExists(dirPath: string): Promise<void>;
|
|
@@ -18,7 +18,7 @@ export declare function clearPaths(paths: string[]): Promise<void>;
|
|
|
18
18
|
* Get directory size with caching (2-minute TTL)
|
|
19
19
|
* Use this for repeated size calculations on the same paths
|
|
20
20
|
*/
|
|
21
|
-
export declare function getCachedDirectorySize(dirPath: string, skipLargeDirectories?: boolean): Promise<number>;
|
|
21
|
+
export declare function getCachedDirectorySize(dirPath: string, skipLargeDirectories?: boolean, timeoutMs?: number): Promise<number>;
|
|
22
22
|
/**
|
|
23
23
|
* Get estimated directory size with caching (2-minute TTL)
|
|
24
24
|
*/
|
package/dist/utils/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAUA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAUA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAsFD,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI3D;AAwED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EAGf,qBAAqB,GAAE,OAAe,EAKtC,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAGD,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAuCjB;AAED,wBAAsB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BhE;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOlE;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAWjD;AAED,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAOtB;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOtD;AAGD,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnE;AAGD,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/D;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,oBAAoB,GAAE,OAAe,EACrC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;GAEG;AACH,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGzD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAG9D"}
|
package/dist/utils/fs.js
CHANGED
|
@@ -69,32 +69,43 @@ class Semaphore {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
|
-
// All cleaners scan in parallel; cap how many sizing operations hit the
|
|
73
|
-
//
|
|
74
|
-
|
|
72
|
+
// All cleaners scan in parallel; cap how many sizing operations hit the disk
|
|
73
|
+
// at once so they share bandwidth instead of thrashing. 32 permits: du sizing
|
|
74
|
+
// is I/O-bound and scales well on SSDs (measured ~96s@16 -> ~65s@32 sizing
|
|
75
|
+
// 500+ real caches), while staying conservative enough not to thrash lower-end
|
|
76
|
+
// or loaded machines. System-wide discovery queues hundreds of directories.
|
|
77
|
+
const sizingSemaphore = new Semaphore(32);
|
|
75
78
|
/**
|
|
76
79
|
* Compute directory size with native `du` (single C-speed process per path,
|
|
77
80
|
* no per-file syscalls from JS). Returns null when du is unavailable or
|
|
78
81
|
* fails so callers can fall back to the JS walker.
|
|
79
82
|
*/
|
|
80
|
-
async function duDirectorySize(dirPath) {
|
|
83
|
+
async function duDirectorySize(dirPath, timeoutMs = 60000) {
|
|
81
84
|
await sizingSemaphore.acquire();
|
|
82
85
|
try {
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
// No "--" end-of-options marker: BusyBox du (Alpine) rejects it, and every
|
|
87
|
+
// path we size is absolute so it can never be misread as a flag.
|
|
88
|
+
const { stdout } = await execFileAsync("du", ["-sk", dirPath], {
|
|
89
|
+
timeout: timeoutMs,
|
|
85
90
|
maxBuffer: 1024 * 1024,
|
|
86
91
|
});
|
|
87
92
|
return parseDuOutput(stdout);
|
|
88
93
|
}
|
|
89
94
|
catch (error) {
|
|
95
|
+
const e = error;
|
|
90
96
|
// du exits non-zero when some subdirectories are unreadable but still
|
|
91
97
|
// prints the total it could measure - use that partial result.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const size = parseDuOutput(stdout);
|
|
98
|
+
if (e.stdout) {
|
|
99
|
+
const size = parseDuOutput(e.stdout);
|
|
95
100
|
if (size !== null)
|
|
96
101
|
return size;
|
|
97
102
|
}
|
|
103
|
+
// Killed by the timeout: the tree is too large to finish in budget. Signal
|
|
104
|
+
// "timeout" so the caller estimates instead of running the (even slower)
|
|
105
|
+
// JS walker over the same tree.
|
|
106
|
+
if (e.killed || e.signal === "SIGTERM")
|
|
107
|
+
return "timeout";
|
|
108
|
+
// du missing or otherwise errored: let the caller fall back to the walker.
|
|
98
109
|
return null;
|
|
99
110
|
}
|
|
100
111
|
finally {
|
|
@@ -113,20 +124,31 @@ function parseDuOutput(stdout) {
|
|
|
113
124
|
* from readdir to avoid one stat() per entry, and walks directories with
|
|
114
125
|
* bounded concurrency instead of one item at a time.
|
|
115
126
|
*/
|
|
127
|
+
// Recursion depth cap: real cache trees are shallow, and bounding depth stops
|
|
128
|
+
// a symlink/junction cycle (Windows junctions report as directories) from
|
|
129
|
+
// looping forever if the symlink guard below is ever bypassed.
|
|
130
|
+
const MAX_WALK_DEPTH = 64;
|
|
116
131
|
async function walkDirectorySize(rootDir) {
|
|
117
132
|
let totalSize = 0;
|
|
118
133
|
let activeWalkers = 0;
|
|
119
|
-
const pendingDirs = [
|
|
134
|
+
const pendingDirs = [
|
|
135
|
+
{ dir: rootDir, depth: 0 },
|
|
136
|
+
];
|
|
120
137
|
const maxConcurrentDirs = 16;
|
|
121
138
|
await new Promise((resolveWalk) => {
|
|
122
|
-
const processDir = async (dir) => {
|
|
139
|
+
const processDir = async (dir, depth) => {
|
|
123
140
|
try {
|
|
124
141
|
const entries = await fs_1.promises.readdir(dir, { withFileTypes: true });
|
|
125
142
|
const statTasks = [];
|
|
126
143
|
for (const entry of entries) {
|
|
127
144
|
const entryPath = path_1.default.join(dir, entry.name);
|
|
128
|
-
|
|
129
|
-
|
|
145
|
+
// Never recurse through a symlink/junction: it can escape the tree,
|
|
146
|
+
// double-count shared targets, or cycle (Windows junctions report
|
|
147
|
+
// isDirectory()===true). Count the link itself as a leaf instead.
|
|
148
|
+
if (entry.isDirectory() && !entry.isSymbolicLink()) {
|
|
149
|
+
if (depth < MAX_WALK_DEPTH) {
|
|
150
|
+
pendingDirs.push({ dir: entryPath, depth: depth + 1 });
|
|
151
|
+
}
|
|
130
152
|
}
|
|
131
153
|
else {
|
|
132
154
|
// lstat: count symlinks themselves, never follow them
|
|
@@ -143,9 +165,9 @@ async function walkDirectorySize(rootDir) {
|
|
|
143
165
|
};
|
|
144
166
|
const pump = () => {
|
|
145
167
|
while (pendingDirs.length > 0 && activeWalkers < maxConcurrentDirs) {
|
|
146
|
-
const dir = pendingDirs.pop();
|
|
168
|
+
const { dir, depth } = pendingDirs.pop();
|
|
147
169
|
activeWalkers++;
|
|
148
|
-
processDir(dir).finally(() => {
|
|
170
|
+
processDir(dir, depth).finally(() => {
|
|
149
171
|
activeWalkers--;
|
|
150
172
|
pump();
|
|
151
173
|
});
|
|
@@ -161,7 +183,12 @@ async function walkDirectorySize(rootDir) {
|
|
|
161
183
|
async function getDirectorySize(dirPath,
|
|
162
184
|
// Kept for API compatibility; sizing is now fast enough that estimation
|
|
163
185
|
// shortcuts are no longer needed.
|
|
164
|
-
_skipLargeDirectories = false
|
|
186
|
+
_skipLargeDirectories = false,
|
|
187
|
+
// Per-directory sizing budget. Survey-style callers (broad discovery over
|
|
188
|
+
// hundreds of dirs, some enormous) pass a small budget so one giant tree
|
|
189
|
+
// cannot stall the shared sizing queue; on timeout the sampled estimate
|
|
190
|
+
// is used instead.
|
|
191
|
+
timeoutMs = 60000) {
|
|
165
192
|
try {
|
|
166
193
|
const stats = await fs_1.promises.stat(dirPath);
|
|
167
194
|
if (!stats.isDirectory()) {
|
|
@@ -172,15 +199,22 @@ _skipLargeDirectories = false) {
|
|
|
172
199
|
return 0;
|
|
173
200
|
}
|
|
174
201
|
if (!isWindows) {
|
|
175
|
-
const duSize = await duDirectorySize(dirPath);
|
|
176
|
-
if (duSize
|
|
202
|
+
const duSize = await duDirectorySize(dirPath, timeoutMs);
|
|
203
|
+
if (typeof duSize === "number")
|
|
177
204
|
return duSize;
|
|
205
|
+
// du timed out on a tree too large to finish in budget: estimate rather
|
|
206
|
+
// than run the (even slower) JS walker over the same tree. Exact bytes are
|
|
207
|
+
// not needed for discovery display, and this avoids a second timeout.
|
|
208
|
+
if (duSize === "timeout")
|
|
209
|
+
return getEstimatedDirectorySize(dirPath);
|
|
210
|
+
// duSize === null: du is unavailable/errored - fall through to the walker.
|
|
178
211
|
}
|
|
212
|
+
// Windows (no du) or du unavailable: bounded JS walker, estimate as a last
|
|
213
|
+
// resort.
|
|
179
214
|
try {
|
|
180
|
-
return await withTimeout(walkDirectorySize(dirPath),
|
|
215
|
+
return await withTimeout(walkDirectorySize(dirPath), timeoutMs);
|
|
181
216
|
}
|
|
182
217
|
catch {
|
|
183
|
-
// Last resort: sampled estimate rather than hanging forever
|
|
184
218
|
return getEstimatedDirectorySize(dirPath);
|
|
185
219
|
}
|
|
186
220
|
}
|
|
@@ -310,8 +344,8 @@ async function clearPaths(paths) {
|
|
|
310
344
|
* Get directory size with caching (2-minute TTL)
|
|
311
345
|
* Use this for repeated size calculations on the same paths
|
|
312
346
|
*/
|
|
313
|
-
async function getCachedDirectorySize(dirPath, skipLargeDirectories = false) {
|
|
314
|
-
return cache_1.cacheManager.getCachedSize(dirPath, () => getDirectorySize(dirPath, skipLargeDirectories), 120000);
|
|
347
|
+
async function getCachedDirectorySize(dirPath, skipLargeDirectories = false, timeoutMs) {
|
|
348
|
+
return cache_1.cacheManager.getCachedSize(dirPath, () => getDirectorySize(dirPath, skipLargeDirectories, timeoutMs), 120000);
|
|
315
349
|
}
|
|
316
350
|
/**
|
|
317
351
|
* Get estimated directory size with caching (2-minute TTL)
|
package/dist/utils/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":";;;;;AAUA,gCAOC;
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"which.d.ts","sourceRoot":"","sources":["../../src/utils/which.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"which.d.ts","sourceRoot":"","sources":["../../src/utils/which.ts"],"names":[],"mappings":"AAkEA;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIrE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,QAAQ,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,OAAO,CAAC,CAGlB"}
|
package/dist/utils/which.js
CHANGED
|
@@ -27,6 +27,9 @@ async function findOnPath(command) {
|
|
|
27
27
|
const extensions = isWindows
|
|
28
28
|
? (process.env.PATHEXT || ".COM;.EXE;.BAT;.CMD")
|
|
29
29
|
.split(";")
|
|
30
|
+
// Trim each entry: a PATHEXT like ".COM; .EXE" would otherwise yield
|
|
31
|
+
// a leading-space extension and build candidate paths that never match.
|
|
32
|
+
.map((ext) => ext.trim())
|
|
30
33
|
.filter(Boolean)
|
|
31
34
|
: [""];
|
|
32
35
|
const candidates = [];
|
package/dist/utils/which.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"which.js","sourceRoot":"","sources":["../../src/utils/which.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"which.js","sourceRoot":"","sources":["../../src/utils/which.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "squeaky-clean",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "✨ Easy, customizable and expandable development cache cleaner CLI with interactive configuration! Smart, safe, and configurable cache management for 25+ development tools.",
|
|
5
5
|
"main": "dist/cli.js",
|
|
6
6
|
"bin": {
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"test": "vitest",
|
|
19
19
|
"test:watch": "vitest --watch",
|
|
20
20
|
"test:coverage": "vitest run --coverage",
|
|
21
|
+
"test:os": "vitest run --config vitest.os.config.ts",
|
|
21
22
|
"lint": "eslint src",
|
|
22
23
|
"lint:fix": "eslint src --fix",
|
|
23
24
|
"format": "prettier --write \"src/**/*.{ts,tsx,json}\"",
|