squeaky-clean 0.1.1 → 0.1.3

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 (38) hide show
  1. package/dist/cleaners/cargo.d.ts +15 -0
  2. package/dist/cleaners/cargo.d.ts.map +1 -0
  3. package/dist/cleaners/cargo.js +193 -0
  4. package/dist/cleaners/cargo.js.map +1 -0
  5. package/dist/cleaners/cocoapods.d.ts +16 -0
  6. package/dist/cleaners/cocoapods.d.ts.map +1 -0
  7. package/dist/cleaners/cocoapods.js +180 -0
  8. package/dist/cleaners/cocoapods.js.map +1 -0
  9. package/dist/cleaners/maven.d.ts +15 -0
  10. package/dist/cleaners/maven.d.ts.map +1 -0
  11. package/dist/cleaners/maven.js +182 -0
  12. package/dist/cleaners/maven.js.map +1 -0
  13. package/dist/cleaners/nuget.d.ts +16 -0
  14. package/dist/cleaners/nuget.d.ts.map +1 -0
  15. package/dist/cleaners/nuget.js +197 -0
  16. package/dist/cleaners/nuget.js.map +1 -0
  17. package/dist/cleaners/pipenv.d.ts +16 -0
  18. package/dist/cleaners/pipenv.d.ts.map +1 -0
  19. package/dist/cleaners/pipenv.js +184 -0
  20. package/dist/cleaners/pipenv.js.map +1 -0
  21. package/dist/cleaners/poetry.d.ts +16 -0
  22. package/dist/cleaners/poetry.d.ts.map +1 -0
  23. package/dist/cleaners/poetry.js +184 -0
  24. package/dist/cleaners/poetry.js.map +1 -0
  25. package/dist/cleaners/swiftpm.d.ts +16 -0
  26. package/dist/cleaners/swiftpm.d.ts.map +1 -0
  27. package/dist/cleaners/swiftpm.js +179 -0
  28. package/dist/cleaners/swiftpm.js.map +1 -0
  29. package/dist/cli.js +1 -1
  30. package/dist/config/index.d.ts +5 -0
  31. package/dist/config/index.d.ts.map +1 -1
  32. package/dist/config/index.js +13 -0
  33. package/dist/config/index.js.map +1 -1
  34. package/dist/utils/cli.d.ts +1 -1
  35. package/dist/utils/cli.d.ts.map +1 -1
  36. package/dist/utils/cli.js +4 -1
  37. package/dist/utils/cli.js.map +1 -1
  38. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nuget.d.ts","sourceRoot":"","sources":["../../src/cleaners/nuget.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,SAAS,EACT,sBAAsB,EACtB,WAAW,EACX,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,cAAM,YAAa,YAAW,aAAa;IACzC,IAAI,SAAW;IACf,IAAI,EAAG,iBAAiB,CAAU;IAClC,WAAW,SAA+B;IAE1C,OAAO,CAAC,aAAa;YAcP,eAAe;IAoCvB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAc/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;YAkC1B,eAAe;IAwEvB,KAAK,CACT,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,sBAAsB,EAClC,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,WAAW,CAAC;IAgBjB,eAAe,CACnB,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,WAAW,CAAC;CAgBxB;;AAED,wBAAkC"}
@@ -0,0 +1,197 @@
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
+ const path_1 = __importDefault(require("path"));
7
+ const os_1 = __importDefault(require("os"));
8
+ const execa_1 = __importDefault(require("execa"));
9
+ const fs_1 = require("fs");
10
+ const fs_2 = require("../utils/fs");
11
+ const cli_1 = require("../utils/cli");
12
+ const minimatch_1 = require("minimatch");
13
+ class NugetCleaner {
14
+ constructor() {
15
+ this.name = "nuget";
16
+ this.type = "package-manager";
17
+ this.description = ".NET NuGet package caches";
18
+ }
19
+ getCachePaths() {
20
+ const home = os_1.default.homedir();
21
+ const packages = path_1.default.join(home, ".nuget", "packages");
22
+ let httpCache = path_1.default.join(home, ".nuget", "v3-cache");
23
+ if (process.platform === "win32") {
24
+ const localAppData = process.env.LOCALAPPDATA || path_1.default.join(home, "AppData", "Local");
25
+ httpCache = path_1.default.join(localAppData, "NuGet", "v3-cache");
26
+ }
27
+ return { packages, http: httpCache };
28
+ }
29
+ async buildCategories() {
30
+ const paths = this.getCachePaths();
31
+ const categories = [
32
+ {
33
+ id: "packages",
34
+ name: "NuGet packages",
35
+ description: "Downloaded packages cache",
36
+ paths: [paths.packages],
37
+ priority: "normal",
38
+ useCase: "development",
39
+ },
40
+ {
41
+ id: "http-cache",
42
+ name: "HTTP cache",
43
+ description: "HTTP responses and metadata cache",
44
+ paths: [paths.http],
45
+ priority: "normal",
46
+ useCase: "development",
47
+ },
48
+ ];
49
+ const existing = [];
50
+ for (const category of categories) {
51
+ const validPaths = [];
52
+ for (const cachePath of category.paths) {
53
+ if (await (0, fs_2.pathExists)(cachePath)) {
54
+ validPaths.push(cachePath);
55
+ }
56
+ }
57
+ if (validPaths.length > 0) {
58
+ existing.push({ ...category, paths: validPaths });
59
+ }
60
+ }
61
+ return existing;
62
+ }
63
+ async isAvailable() {
64
+ try {
65
+ await (0, execa_1.default)("dotnet", ["--info"]);
66
+ return true;
67
+ }
68
+ catch {
69
+ try {
70
+ await (0, execa_1.default)("nuget", ["help"]);
71
+ return true;
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ }
77
+ }
78
+ async getCacheInfo() {
79
+ const categories = await this.buildCategories();
80
+ let totalSize = 0;
81
+ let lastModified;
82
+ for (const category of categories) {
83
+ let size = 0;
84
+ for (const cachePath of category.paths) {
85
+ size += await (0, fs_2.getDirectorySize)(cachePath, true);
86
+ try {
87
+ const stats = await fs_1.promises.stat(cachePath);
88
+ if (!lastModified || stats.mtime > lastModified) {
89
+ lastModified = stats.mtime;
90
+ }
91
+ }
92
+ catch {
93
+ // ignore
94
+ }
95
+ }
96
+ category.size = size;
97
+ totalSize += size;
98
+ }
99
+ return {
100
+ name: this.name,
101
+ type: this.type,
102
+ description: this.description,
103
+ paths: categories.flatMap((c) => c.paths),
104
+ isInstalled: await this.isAvailable(),
105
+ size: totalSize,
106
+ lastModified,
107
+ categories,
108
+ };
109
+ }
110
+ async clearCategories(categories, dryRun, protectedPaths, cacheInfo) {
111
+ const pathsToClear = Array.from(new Set(categories.flatMap((c) => c.paths)));
112
+ const sizeBefore = cacheInfo?.size ??
113
+ categories.reduce((sum, cat) => sum + (cat.size ?? 0), 0);
114
+ if (pathsToClear.length === 0) {
115
+ return {
116
+ name: this.name,
117
+ success: true,
118
+ clearedPaths: [],
119
+ sizeBefore: 0,
120
+ sizeAfter: 0,
121
+ };
122
+ }
123
+ if (dryRun) {
124
+ (0, cli_1.printVerbose)(`[DRY RUN] Would clear NuGet caches: ${pathsToClear.join(", ")}`);
125
+ return {
126
+ name: this.name,
127
+ success: true,
128
+ clearedPaths: pathsToClear,
129
+ clearedCategories: categories.map((c) => c.id),
130
+ sizeBefore,
131
+ sizeAfter: sizeBefore,
132
+ };
133
+ }
134
+ const clearedPaths = [];
135
+ let success = true;
136
+ let error;
137
+ for (const cachePath of pathsToClear) {
138
+ const isProtected = protectedPaths.some((pattern) => (0, minimatch_1.minimatch)(cachePath, pattern, { dot: true }));
139
+ if (isProtected) {
140
+ (0, cli_1.printVerbose)(`Skipping protected path: ${cachePath}`);
141
+ continue;
142
+ }
143
+ try {
144
+ if (await (0, fs_2.pathExists)(cachePath)) {
145
+ (0, cli_1.printVerbose)(`Clearing NuGet cache at ${cachePath}`);
146
+ await (0, fs_2.safeRmrf)(cachePath);
147
+ clearedPaths.push(cachePath);
148
+ }
149
+ }
150
+ catch (err) {
151
+ success = false;
152
+ error = `Failed to clear ${cachePath}: ${err}`;
153
+ }
154
+ }
155
+ return {
156
+ name: this.name,
157
+ success,
158
+ error,
159
+ clearedPaths,
160
+ clearedCategories: categories.map((c) => c.id),
161
+ sizeBefore,
162
+ sizeAfter: success ? 0 : sizeBefore,
163
+ };
164
+ }
165
+ async clear(dryRun = false, _criteria, cacheInfo, protectedPaths = []) {
166
+ const info = cacheInfo || (await this.getCacheInfo());
167
+ if (!info.isInstalled) {
168
+ return {
169
+ name: this.name,
170
+ success: false,
171
+ error: "nuget/dotnet is not installed",
172
+ clearedPaths: [],
173
+ sizeBefore: 0,
174
+ sizeAfter: 0,
175
+ };
176
+ }
177
+ const categories = info.categories || [];
178
+ return this.clearCategories(categories, dryRun, protectedPaths, info);
179
+ }
180
+ async clearByCategory(categoryIds, dryRun = false, cacheInfo, protectedPaths = []) {
181
+ const info = cacheInfo || (await this.getCacheInfo());
182
+ if (!info.isInstalled) {
183
+ return {
184
+ name: this.name,
185
+ success: false,
186
+ error: "nuget/dotnet is not installed",
187
+ clearedPaths: [],
188
+ sizeBefore: 0,
189
+ sizeAfter: 0,
190
+ };
191
+ }
192
+ const categories = info.categories?.filter((c) => categoryIds.includes(c.id)) ?? [];
193
+ return this.clearCategories(categories, dryRun, protectedPaths, info);
194
+ }
195
+ }
196
+ exports.default = new NugetCleaner();
197
+ //# sourceMappingURL=nuget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nuget.js","sourceRoot":"","sources":["../../src/cleaners/nuget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { CacheInfo, CacheSelectionCriteria, ClearResult, CleanerModule } from "../types";
2
+ declare class PipenvCleaner implements CleanerModule {
3
+ name: string;
4
+ type: "package-manager";
5
+ description: string;
6
+ private getCachePaths;
7
+ private buildCategories;
8
+ isAvailable(): Promise<boolean>;
9
+ getCacheInfo(): Promise<CacheInfo>;
10
+ private clearCategories;
11
+ clear(dryRun?: boolean, _criteria?: CacheSelectionCriteria, cacheInfo?: CacheInfo, protectedPaths?: string[]): Promise<ClearResult>;
12
+ clearByCategory(categoryIds: string[], dryRun?: boolean, cacheInfo?: CacheInfo, protectedPaths?: string[]): Promise<ClearResult>;
13
+ }
14
+ declare const _default: PipenvCleaner;
15
+ export default _default;
16
+ //# sourceMappingURL=pipenv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipenv.d.ts","sourceRoot":"","sources":["../../src/cleaners/pipenv.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,SAAS,EACT,sBAAsB,EACtB,WAAW,EACX,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,cAAM,aAAc,YAAW,aAAa;IAC1C,IAAI,SAAY;IAChB,IAAI,EAAG,iBAAiB,CAAU;IAClC,WAAW,SAA4C;IAEvD,OAAO,CAAC,aAAa;YAiBP,eAAe;IA2BvB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;YAkC1B,eAAe;IAwEvB,KAAK,CACT,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,sBAAsB,EAClC,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,WAAW,CAAC;IAgBjB,eAAe,CACnB,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,WAAW,CAAC;CAgBxB;;AAED,wBAAmC"}
@@ -0,0 +1,184 @@
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
+ const path_1 = __importDefault(require("path"));
7
+ const os_1 = __importDefault(require("os"));
8
+ const execa_1 = __importDefault(require("execa"));
9
+ const fs_1 = require("fs");
10
+ const fs_2 = require("../utils/fs");
11
+ const cli_1 = require("../utils/cli");
12
+ const minimatch_1 = require("minimatch");
13
+ class PipenvCleaner {
14
+ constructor() {
15
+ this.name = "pipenv";
16
+ this.type = "package-manager";
17
+ this.description = "Pipenv caches and virtualenv downloads";
18
+ }
19
+ getCachePaths() {
20
+ const home = os_1.default.homedir();
21
+ const paths = [path_1.default.join(home, ".cache", "pipenv")];
22
+ if (process.platform === "darwin") {
23
+ paths.push(path_1.default.join(home, "Library", "Caches", "pipenv"));
24
+ }
25
+ if (process.platform === "win32") {
26
+ const localAppData = process.env.LOCALAPPDATA || path_1.default.join(home, "AppData", "Local");
27
+ paths.push(path_1.default.join(localAppData, "pipenv", "Cache"));
28
+ }
29
+ return paths;
30
+ }
31
+ async buildCategories() {
32
+ const categories = [
33
+ {
34
+ id: "cache",
35
+ name: "Pipenv cache",
36
+ description: "Downloaded wheels and lock metadata",
37
+ paths: this.getCachePaths(),
38
+ priority: "normal",
39
+ useCase: "development",
40
+ },
41
+ ];
42
+ const existing = [];
43
+ for (const category of categories) {
44
+ const validPaths = [];
45
+ for (const cachePath of category.paths) {
46
+ if (await (0, fs_2.pathExists)(cachePath)) {
47
+ validPaths.push(cachePath);
48
+ }
49
+ }
50
+ if (validPaths.length > 0) {
51
+ existing.push({ ...category, paths: validPaths });
52
+ }
53
+ }
54
+ return existing;
55
+ }
56
+ async isAvailable() {
57
+ try {
58
+ await (0, execa_1.default)("pipenv", ["--version"]);
59
+ return true;
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ async getCacheInfo() {
66
+ const categories = await this.buildCategories();
67
+ let totalSize = 0;
68
+ let lastModified;
69
+ for (const category of categories) {
70
+ let size = 0;
71
+ for (const cachePath of category.paths) {
72
+ size += await (0, fs_2.getDirectorySize)(cachePath, true);
73
+ try {
74
+ const stats = await fs_1.promises.stat(cachePath);
75
+ if (!lastModified || stats.mtime > lastModified) {
76
+ lastModified = stats.mtime;
77
+ }
78
+ }
79
+ catch {
80
+ // ignore
81
+ }
82
+ }
83
+ category.size = size;
84
+ totalSize += size;
85
+ }
86
+ return {
87
+ name: this.name,
88
+ type: this.type,
89
+ description: this.description,
90
+ paths: categories.flatMap((c) => c.paths),
91
+ isInstalled: await this.isAvailable(),
92
+ size: totalSize,
93
+ lastModified,
94
+ categories,
95
+ };
96
+ }
97
+ async clearCategories(categories, dryRun, protectedPaths, cacheInfo) {
98
+ const pathsToClear = Array.from(new Set(categories.flatMap((c) => c.paths)));
99
+ const sizeBefore = cacheInfo?.size ??
100
+ categories.reduce((sum, cat) => sum + (cat.size ?? 0), 0);
101
+ if (pathsToClear.length === 0) {
102
+ return {
103
+ name: this.name,
104
+ success: true,
105
+ clearedPaths: [],
106
+ sizeBefore: 0,
107
+ sizeAfter: 0,
108
+ };
109
+ }
110
+ if (dryRun) {
111
+ (0, cli_1.printVerbose)(`[DRY RUN] Would clear pipenv cache: ${pathsToClear.join(", ")}`);
112
+ return {
113
+ name: this.name,
114
+ success: true,
115
+ clearedPaths: pathsToClear,
116
+ clearedCategories: categories.map((c) => c.id),
117
+ sizeBefore,
118
+ sizeAfter: sizeBefore,
119
+ };
120
+ }
121
+ const clearedPaths = [];
122
+ let success = true;
123
+ let error;
124
+ for (const cachePath of pathsToClear) {
125
+ const isProtected = protectedPaths.some((pattern) => (0, minimatch_1.minimatch)(cachePath, pattern, { dot: true }));
126
+ if (isProtected) {
127
+ (0, cli_1.printVerbose)(`Skipping protected path: ${cachePath}`);
128
+ continue;
129
+ }
130
+ try {
131
+ if (await (0, fs_2.pathExists)(cachePath)) {
132
+ (0, cli_1.printVerbose)(`Clearing pipenv cache at ${cachePath}`);
133
+ await (0, fs_2.safeRmrf)(cachePath);
134
+ clearedPaths.push(cachePath);
135
+ }
136
+ }
137
+ catch (err) {
138
+ success = false;
139
+ error = `Failed to clear ${cachePath}: ${err}`;
140
+ }
141
+ }
142
+ return {
143
+ name: this.name,
144
+ success,
145
+ error,
146
+ clearedPaths,
147
+ clearedCategories: categories.map((c) => c.id),
148
+ sizeBefore,
149
+ sizeAfter: success ? 0 : sizeBefore,
150
+ };
151
+ }
152
+ async clear(dryRun = false, _criteria, cacheInfo, protectedPaths = []) {
153
+ const info = cacheInfo || (await this.getCacheInfo());
154
+ if (!info.isInstalled) {
155
+ return {
156
+ name: this.name,
157
+ success: false,
158
+ error: "pipenv is not installed",
159
+ clearedPaths: [],
160
+ sizeBefore: 0,
161
+ sizeAfter: 0,
162
+ };
163
+ }
164
+ const categories = info.categories || [];
165
+ return this.clearCategories(categories, dryRun, protectedPaths, info);
166
+ }
167
+ async clearByCategory(categoryIds, dryRun = false, cacheInfo, protectedPaths = []) {
168
+ const info = cacheInfo || (await this.getCacheInfo());
169
+ if (!info.isInstalled) {
170
+ return {
171
+ name: this.name,
172
+ success: false,
173
+ error: "pipenv is not installed",
174
+ clearedPaths: [],
175
+ sizeBefore: 0,
176
+ sizeAfter: 0,
177
+ };
178
+ }
179
+ const categories = info.categories?.filter((c) => categoryIds.includes(c.id)) ?? [];
180
+ return this.clearCategories(categories, dryRun, protectedPaths, info);
181
+ }
182
+ }
183
+ exports.default = new PipenvCleaner();
184
+ //# sourceMappingURL=pipenv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipenv.js","sourceRoot":"","sources":["../../src/cleaners/pipenv.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { CacheInfo, CacheSelectionCriteria, ClearResult, CleanerModule } from "../types";
2
+ declare class PoetryCleaner implements CleanerModule {
3
+ name: string;
4
+ type: "package-manager";
5
+ description: string;
6
+ private getCachePaths;
7
+ private buildCategories;
8
+ isAvailable(): Promise<boolean>;
9
+ getCacheInfo(): Promise<CacheInfo>;
10
+ private clearCategories;
11
+ clear(dryRun?: boolean, _criteria?: CacheSelectionCriteria, cacheInfo?: CacheInfo, protectedPaths?: string[]): Promise<ClearResult>;
12
+ clearByCategory(categoryIds: string[], dryRun?: boolean, cacheInfo?: CacheInfo, protectedPaths?: string[]): Promise<ClearResult>;
13
+ }
14
+ declare const _default: PoetryCleaner;
15
+ export default _default;
16
+ //# sourceMappingURL=poetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poetry.d.ts","sourceRoot":"","sources":["../../src/cleaners/poetry.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,SAAS,EACT,sBAAsB,EACtB,WAAW,EACX,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,cAAM,aAAc,YAAW,aAAa;IAC1C,IAAI,SAAY;IAChB,IAAI,EAAG,iBAAiB,CAAU;IAClC,WAAW,SAAqC;IAEhD,OAAO,CAAC,aAAa;YAiBP,eAAe;IA2BvB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;YAkC1B,eAAe;IAwEvB,KAAK,CACT,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,sBAAsB,EAClC,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,WAAW,CAAC;IAgBjB,eAAe,CACnB,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,WAAW,CAAC;CAgBxB;;AAED,wBAAmC"}
@@ -0,0 +1,184 @@
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
+ const path_1 = __importDefault(require("path"));
7
+ const os_1 = __importDefault(require("os"));
8
+ const execa_1 = __importDefault(require("execa"));
9
+ const fs_1 = require("fs");
10
+ const fs_2 = require("../utils/fs");
11
+ const cli_1 = require("../utils/cli");
12
+ const minimatch_1 = require("minimatch");
13
+ class PoetryCleaner {
14
+ constructor() {
15
+ this.name = "poetry";
16
+ this.type = "package-manager";
17
+ this.description = "Python Poetry cache directories";
18
+ }
19
+ getCachePaths() {
20
+ const home = os_1.default.homedir();
21
+ const paths = [path_1.default.join(home, ".cache", "pypoetry")];
22
+ if (process.platform === "darwin") {
23
+ paths.push(path_1.default.join(home, "Library", "Caches", "pypoetry"));
24
+ }
25
+ if (process.platform === "win32") {
26
+ const localAppData = process.env.LOCALAPPDATA || path_1.default.join(home, "AppData", "Local");
27
+ paths.push(path_1.default.join(localAppData, "pypoetry", "Cache"));
28
+ }
29
+ return paths;
30
+ }
31
+ async buildCategories() {
32
+ const categories = [
33
+ {
34
+ id: "cache",
35
+ name: "Poetry cache",
36
+ description: "Cached Poetry packages and metadata",
37
+ paths: this.getCachePaths(),
38
+ priority: "normal",
39
+ useCase: "development",
40
+ },
41
+ ];
42
+ const existing = [];
43
+ for (const category of categories) {
44
+ const validPaths = [];
45
+ for (const cachePath of category.paths) {
46
+ if (await (0, fs_2.pathExists)(cachePath)) {
47
+ validPaths.push(cachePath);
48
+ }
49
+ }
50
+ if (validPaths.length > 0) {
51
+ existing.push({ ...category, paths: validPaths });
52
+ }
53
+ }
54
+ return existing;
55
+ }
56
+ async isAvailable() {
57
+ try {
58
+ await (0, execa_1.default)("poetry", ["--version"]);
59
+ return true;
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ async getCacheInfo() {
66
+ const categories = await this.buildCategories();
67
+ let totalSize = 0;
68
+ let lastModified;
69
+ for (const category of categories) {
70
+ let size = 0;
71
+ for (const cachePath of category.paths) {
72
+ size += await (0, fs_2.getDirectorySize)(cachePath, true);
73
+ try {
74
+ const stats = await fs_1.promises.stat(cachePath);
75
+ if (!lastModified || stats.mtime > lastModified) {
76
+ lastModified = stats.mtime;
77
+ }
78
+ }
79
+ catch {
80
+ // ignore
81
+ }
82
+ }
83
+ category.size = size;
84
+ totalSize += size;
85
+ }
86
+ return {
87
+ name: this.name,
88
+ type: this.type,
89
+ description: this.description,
90
+ paths: categories.flatMap((c) => c.paths),
91
+ isInstalled: await this.isAvailable(),
92
+ size: totalSize,
93
+ lastModified,
94
+ categories,
95
+ };
96
+ }
97
+ async clearCategories(categories, dryRun, protectedPaths, cacheInfo) {
98
+ const pathsToClear = Array.from(new Set(categories.flatMap((c) => c.paths)));
99
+ const sizeBefore = cacheInfo?.size ??
100
+ categories.reduce((sum, cat) => sum + (cat.size ?? 0), 0);
101
+ if (pathsToClear.length === 0) {
102
+ return {
103
+ name: this.name,
104
+ success: true,
105
+ clearedPaths: [],
106
+ sizeBefore: 0,
107
+ sizeAfter: 0,
108
+ };
109
+ }
110
+ if (dryRun) {
111
+ (0, cli_1.printVerbose)(`[DRY RUN] Would clear poetry cache: ${pathsToClear.join(", ")}`);
112
+ return {
113
+ name: this.name,
114
+ success: true,
115
+ clearedPaths: pathsToClear,
116
+ clearedCategories: categories.map((c) => c.id),
117
+ sizeBefore,
118
+ sizeAfter: sizeBefore,
119
+ };
120
+ }
121
+ const clearedPaths = [];
122
+ let success = true;
123
+ let error;
124
+ for (const cachePath of pathsToClear) {
125
+ const isProtected = protectedPaths.some((pattern) => (0, minimatch_1.minimatch)(cachePath, pattern, { dot: true }));
126
+ if (isProtected) {
127
+ (0, cli_1.printVerbose)(`Skipping protected path: ${cachePath}`);
128
+ continue;
129
+ }
130
+ try {
131
+ if (await (0, fs_2.pathExists)(cachePath)) {
132
+ (0, cli_1.printVerbose)(`Clearing poetry cache at ${cachePath}`);
133
+ await (0, fs_2.safeRmrf)(cachePath);
134
+ clearedPaths.push(cachePath);
135
+ }
136
+ }
137
+ catch (err) {
138
+ success = false;
139
+ error = `Failed to clear ${cachePath}: ${err}`;
140
+ }
141
+ }
142
+ return {
143
+ name: this.name,
144
+ success,
145
+ error,
146
+ clearedPaths,
147
+ clearedCategories: categories.map((c) => c.id),
148
+ sizeBefore,
149
+ sizeAfter: success ? 0 : sizeBefore,
150
+ };
151
+ }
152
+ async clear(dryRun = false, _criteria, cacheInfo, protectedPaths = []) {
153
+ const info = cacheInfo || (await this.getCacheInfo());
154
+ if (!info.isInstalled) {
155
+ return {
156
+ name: this.name,
157
+ success: false,
158
+ error: "poetry is not installed",
159
+ clearedPaths: [],
160
+ sizeBefore: 0,
161
+ sizeAfter: 0,
162
+ };
163
+ }
164
+ const categories = info.categories || [];
165
+ return this.clearCategories(categories, dryRun, protectedPaths, info);
166
+ }
167
+ async clearByCategory(categoryIds, dryRun = false, cacheInfo, protectedPaths = []) {
168
+ const info = cacheInfo || (await this.getCacheInfo());
169
+ if (!info.isInstalled) {
170
+ return {
171
+ name: this.name,
172
+ success: false,
173
+ error: "poetry is not installed",
174
+ clearedPaths: [],
175
+ sizeBefore: 0,
176
+ sizeAfter: 0,
177
+ };
178
+ }
179
+ const categories = info.categories?.filter((c) => categoryIds.includes(c.id)) ?? [];
180
+ return this.clearCategories(categories, dryRun, protectedPaths, info);
181
+ }
182
+ }
183
+ exports.default = new PoetryCleaner();
184
+ //# sourceMappingURL=poetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poetry.js","sourceRoot":"","sources":["../../src/cleaners/poetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { CacheInfo, CacheSelectionCriteria, ClearResult, CleanerModule } from "../types";
2
+ declare class SwiftPmCleaner implements CleanerModule {
3
+ name: string;
4
+ type: "package-manager";
5
+ description: string;
6
+ private getCachePaths;
7
+ private buildCategories;
8
+ isAvailable(): Promise<boolean>;
9
+ getCacheInfo(): Promise<CacheInfo>;
10
+ private clearCategories;
11
+ clear(dryRun?: boolean, _criteria?: CacheSelectionCriteria, cacheInfo?: CacheInfo, protectedPaths?: string[]): Promise<ClearResult>;
12
+ clearByCategory(categoryIds: string[], dryRun?: boolean, cacheInfo?: CacheInfo, protectedPaths?: string[]): Promise<ClearResult>;
13
+ }
14
+ declare const _default: SwiftPmCleaner;
15
+ export default _default;
16
+ //# sourceMappingURL=swiftpm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swiftpm.d.ts","sourceRoot":"","sources":["../../src/cleaners/swiftpm.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,SAAS,EACT,sBAAsB,EACtB,WAAW,EACX,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,cAAM,cAAe,YAAW,aAAa;IAC3C,IAAI,SAAa;IACjB,IAAI,EAAG,iBAAiB,CAAU;IAClC,WAAW,SAA0C;IAErD,OAAO,CAAC,aAAa;YAKP,eAAe;IA2BvB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAW/B,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;YAkC1B,eAAe;IAwEvB,KAAK,CACT,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,sBAAsB,EAClC,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,WAAW,CAAC;IAgBjB,eAAe,CACnB,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,UAAQ,EACd,SAAS,CAAC,EAAE,SAAS,EACrB,cAAc,GAAE,MAAM,EAAO,GAC5B,OAAO,CAAC,WAAW,CAAC;CAgBxB;;AAED,wBAAoC"}