appclean 1.9.0 → 2.0.2
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/.github/workflows/npm-publish.yml +61 -0
- package/DEVELOPMENT.md +84 -0
- package/GUI_IMPLEMENTATION_STATUS.md +143 -0
- package/MD_Files/INDEX.md +51 -0
- package/PHASE2_COMPLETION.md +281 -0
- package/PHASE3_COMPLETION.md +364 -0
- package/README.md +411 -91
- package/RELEASE_GUIDE.md +236 -0
- package/assets/logo.svg +34 -0
- package/dist/core/appUpdateChecker.js +12 -16
- package/dist/core/appUpdateChecker.js.map +1 -1
- package/dist/core/detector.js +14 -18
- package/dist/core/detector.js.map +1 -1
- package/dist/core/duplicateFileFinder.js +12 -19
- package/dist/core/duplicateFileFinder.js.map +1 -1
- package/dist/core/orphanedDependencyDetector.js +19 -26
- package/dist/core/orphanedDependencyDetector.js.map +1 -1
- package/dist/core/performanceOptimizer.js +6 -10
- package/dist/core/performanceOptimizer.js.map +1 -1
- package/dist/core/permissionHandler.js +21 -25
- package/dist/core/permissionHandler.js.map +1 -1
- package/dist/core/pluginSystem.js +9 -13
- package/dist/core/pluginSystem.js.map +1 -1
- package/dist/core/removalRecorder.js +12 -19
- package/dist/core/removalRecorder.js.map +1 -1
- package/dist/core/remover.js +59 -66
- package/dist/core/remover.js.map +1 -1
- package/dist/core/reportGenerator.d.ts +1 -1
- package/dist/core/reportGenerator.d.ts.map +1 -1
- package/dist/core/reportGenerator.js +27 -34
- package/dist/core/reportGenerator.js.map +1 -1
- package/dist/core/scheduledCleanup.js +23 -30
- package/dist/core/scheduledCleanup.js.map +1 -1
- package/dist/core/serviceFileDetector.js +24 -31
- package/dist/core/serviceFileDetector.js.map +1 -1
- package/dist/core/verificationModule.js +10 -14
- package/dist/core/verificationModule.js.map +1 -1
- package/dist/index.js +118 -156
- package/dist/index.js.map +1 -1
- package/dist/managers/brewManager.js +30 -37
- package/dist/managers/brewManager.js.map +1 -1
- package/dist/managers/customManager.js +23 -30
- package/dist/managers/customManager.js.map +1 -1
- package/dist/managers/linuxManager.js +29 -36
- package/dist/managers/linuxManager.js.map +1 -1
- package/dist/managers/npmManager.js +27 -34
- package/dist/managers/npmManager.js.map +1 -1
- package/dist/types/index.js +1 -2
- package/dist/ui/client/api/client.d.ts +24 -0
- package/dist/ui/client/api/client.d.ts.map +1 -0
- package/dist/ui/client/api/client.js +100 -0
- package/dist/ui/client/api/client.js.map +1 -0
- package/dist/ui/client/app.d.ts +7 -0
- package/dist/ui/client/app.d.ts.map +1 -0
- package/dist/ui/client/app.js +75 -0
- package/dist/ui/client/app.js.map +1 -0
- package/dist/ui/client/index.html +107 -0
- package/dist/ui/client/pages/appDetails.d.ts +8 -0
- package/dist/ui/client/pages/appDetails.d.ts.map +1 -0
- package/dist/ui/client/pages/appDetails.js +287 -0
- package/dist/ui/client/pages/appDetails.js.map +1 -0
- package/dist/ui/client/pages/appSearch.d.ts +2 -0
- package/dist/ui/client/pages/appSearch.d.ts.map +1 -0
- package/dist/ui/client/pages/appSearch.js +221 -0
- package/dist/ui/client/pages/appSearch.js.map +1 -0
- package/dist/ui/client/pages/dashboard.d.ts +2 -0
- package/dist/ui/client/pages/dashboard.d.ts.map +1 -0
- package/dist/ui/client/pages/dashboard.js +175 -0
- package/dist/ui/client/pages/dashboard.js.map +1 -0
- package/dist/ui/client/pages/settings.d.ts +7 -0
- package/dist/ui/client/pages/settings.d.ts.map +1 -0
- package/dist/ui/client/pages/settings.js +279 -0
- package/dist/ui/client/pages/settings.js.map +1 -0
- package/dist/ui/client/state/appStore.d.ts +38 -0
- package/dist/ui/client/state/appStore.d.ts.map +1 -0
- package/dist/ui/client/state/appStore.js +130 -0
- package/dist/ui/client/state/appStore.js.map +1 -0
- package/dist/ui/client/state/dashboardStore.d.ts +31 -0
- package/dist/ui/client/state/dashboardStore.d.ts.map +1 -0
- package/dist/ui/client/state/dashboardStore.js +76 -0
- package/dist/ui/client/state/dashboardStore.js.map +1 -0
- package/dist/ui/client/state/uiStore.d.ts +43 -0
- package/dist/ui/client/state/uiStore.d.ts.map +1 -0
- package/dist/ui/client/state/uiStore.js +109 -0
- package/dist/ui/client/state/uiStore.js.map +1 -0
- package/dist/ui/client/styles/animations.css +349 -0
- package/dist/ui/client/styles/base.css +214 -0
- package/dist/ui/client/styles/components.css +400 -0
- package/dist/ui/client/styles/layout.css +224 -0
- package/dist/ui/client/styles/variables.css +140 -0
- package/dist/ui/client/utils/events.d.ts +19 -0
- package/dist/ui/client/utils/events.d.ts.map +1 -0
- package/dist/ui/client/utils/events.js +54 -0
- package/dist/ui/client/utils/events.js.map +1 -0
- package/dist/ui/client/utils/formatting.d.ts +11 -0
- package/dist/ui/client/utils/formatting.d.ts.map +1 -0
- package/dist/ui/client/utils/formatting.js +104 -0
- package/dist/ui/client/utils/formatting.js.map +1 -0
- package/dist/ui/client/utils/router.d.ts +25 -0
- package/dist/ui/client/utils/router.d.ts.map +1 -0
- package/dist/ui/client/utils/router.js +90 -0
- package/dist/ui/client/utils/router.js.map +1 -0
- package/dist/ui/guiServer.d.ts +11 -5
- package/dist/ui/guiServer.d.ts.map +1 -1
- package/dist/ui/guiServer.js +180 -501
- package/dist/ui/guiServer.js.map +1 -1
- package/dist/ui/menu.js +18 -27
- package/dist/ui/menu.js.map +1 -1
- package/dist/ui/prompts.js +34 -47
- package/dist/ui/prompts.js.map +1 -1
- package/dist/ui/server/middleware/errorHandler.d.ts +19 -0
- package/dist/ui/server/middleware/errorHandler.d.ts.map +1 -0
- package/dist/ui/server/middleware/errorHandler.js +100 -0
- package/dist/ui/server/middleware/errorHandler.js.map +1 -0
- package/dist/ui/server/routes/apps.d.ts +8 -0
- package/dist/ui/server/routes/apps.d.ts.map +1 -0
- package/dist/ui/server/routes/apps.js +74 -0
- package/dist/ui/server/routes/apps.js.map +1 -0
- package/dist/ui/server/routes/dashboard.d.ts +4 -0
- package/dist/ui/server/routes/dashboard.d.ts.map +1 -0
- package/dist/ui/server/routes/dashboard.js +57 -0
- package/dist/ui/server/routes/dashboard.js.map +1 -0
- package/dist/ui/server/routes/settings.d.ts +6 -0
- package/dist/ui/server/routes/settings.d.ts.map +1 -0
- package/dist/ui/server/routes/settings.js +31 -0
- package/dist/ui/server/routes/settings.js.map +1 -0
- package/dist/ui/server/services/appService.d.ts +45 -0
- package/dist/ui/server/services/appService.d.ts.map +1 -0
- package/dist/ui/server/services/appService.js +114 -0
- package/dist/ui/server/services/appService.js.map +1 -0
- package/dist/ui/server/services/removalService.d.ts +24 -0
- package/dist/ui/server/services/removalService.d.ts.map +1 -0
- package/dist/ui/server/services/removalService.js +83 -0
- package/dist/ui/server/services/removalService.js.map +1 -0
- package/dist/utils/filesystem.js +32 -49
- package/dist/utils/filesystem.js.map +1 -1
- package/dist/utils/logger.js +9 -18
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/platform.js +10 -22
- package/dist/utils/platform.js.map +1 -1
- package/dist/utils/upgrade.d.ts +2 -1
- package/dist/utils/upgrade.d.ts.map +1 -1
- package/dist/utils/upgrade.js +24 -15
- package/dist/utils/upgrade.js.map +1 -1
- package/package.json +4 -2
- package/scripts/publish-npm.sh +64 -0
- package/src/core/appUpdateChecker.ts +1 -1
- package/src/core/detector.ts +6 -6
- package/src/core/duplicateFileFinder.ts +1 -1
- package/src/core/orphanedDependencyDetector.ts +2 -2
- package/src/core/performanceOptimizer.ts +1 -1
- package/src/core/permissionHandler.ts +2 -2
- package/src/core/pluginSystem.ts +1 -1
- package/src/core/removalRecorder.ts +2 -2
- package/src/core/remover.ts +11 -11
- package/src/core/reportGenerator.ts +2 -2
- package/src/core/scheduledCleanup.ts +2 -2
- package/src/core/serviceFileDetector.ts +2 -2
- package/src/core/verificationModule.ts +2 -2
- package/src/index.ts +8 -8
- package/src/managers/brewManager.ts +3 -3
- package/src/managers/customManager.ts +2 -2
- package/src/managers/linuxManager.ts +3 -3
- package/src/managers/npmManager.ts +3 -3
- package/src/ui/client/api/client.ts +168 -0
- package/src/ui/client/app.ts +125 -0
- package/src/ui/client/index.html +107 -0
- package/src/ui/client/pages/appDetails.ts +356 -0
- package/src/ui/client/pages/appSearch.ts +283 -0
- package/src/ui/client/pages/dashboard.ts +211 -0
- package/src/ui/client/pages/settings.ts +342 -0
- package/src/ui/client/state/appStore.ts +181 -0
- package/src/ui/client/state/dashboardStore.ts +123 -0
- package/src/ui/client/state/uiStore.ts +166 -0
- package/src/ui/client/styles/animations.css +349 -0
- package/src/ui/client/styles/base.css +214 -0
- package/src/ui/client/styles/components.css +400 -0
- package/src/ui/client/styles/layout.css +224 -0
- package/src/ui/client/styles/variables.css +140 -0
- package/src/ui/client/utils/events.ts +74 -0
- package/src/ui/client/utils/formatting.ts +157 -0
- package/src/ui/client/utils/router.ts +161 -0
- package/src/ui/guiServer.ts +245 -498
- package/src/ui/prompts.ts +1 -1
- package/src/ui/server/middleware/errorHandler.ts +174 -0
- package/src/ui/server/routes/apps.ts +132 -0
- package/src/ui/server/routes/dashboard.ts +93 -0
- package/src/ui/server/routes/settings.ts +63 -0
- package/src/ui/server/services/appService.ts +184 -0
- package/src/ui/server/services/removalService.ts +138 -0
- package/src/utils/upgrade.ts +19 -2
- package/tsconfig.json +3 -2
- package/INDEX.md +0 -165
- /package/{ACTION_CHECKLIST.md → MD_Files/ACTION_CHECKLIST.md} +0 -0
- /package/{APPCLEAN_SUMMARY.md → MD_Files/APPCLEAN_SUMMARY.md} +0 -0
- /package/{CHANGELOG.md → MD_Files/CHANGELOG.md} +0 -0
- /package/{CODE_OF_CONDUCT.md → MD_Files/CODE_OF_CONDUCT.md} +0 -0
- /package/{CODE_REVIEW_REPORT.md → MD_Files/CODE_REVIEW_REPORT.md} +0 -0
- /package/{COMMUNITY_POSTS.md → MD_Files/COMMUNITY_POSTS.md} +0 -0
- /package/{DEPLOYMENT_GUIDE.md → MD_Files/DEPLOYMENT_GUIDE.md} +0 -0
- /package/{DEPLOYMENT_STATUS.md → MD_Files/DEPLOYMENT_STATUS.md} +0 -0
- /package/{EXECUTIVE_REPORT.md → MD_Files/EXECUTIVE_REPORT.md} +0 -0
- /package/{GITHUB_OPTIMIZATION.md → MD_Files/GITHUB_OPTIMIZATION.md} +0 -0
- /package/{MARKETING_SUMMARY.md → MD_Files/MARKETING_SUMMARY.md} +0 -0
- /package/{NPM_PACKAGE_OPTIMIZATION.md → MD_Files/NPM_PACKAGE_OPTIMIZATION.md} +0 -0
- /package/{NPM_PUBLISH.md → MD_Files/NPM_PUBLISH.md} +0 -0
- /package/{PROJECT_SUMMARY.txt → MD_Files/PROJECT_SUMMARY.txt} +0 -0
- /package/{PUBLICATION_SUCCESS_REPORT.md → MD_Files/PUBLICATION_SUCCESS_REPORT.md} +0 -0
- /package/{QUICKSTART.md → MD_Files/QUICKSTART.md} +0 -0
- /package/{SETUP_GITHUB.md → MD_Files/SETUP_GITHUB.md} +0 -0
- /package/{TESTING_SUMMARY.md → MD_Files/TESTING_SUMMARY.md} +0 -0
- /package/{setup-github.sh → MD_Files/setup-github.sh} +0 -0
package/dist/core/remover.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remover.js","sourceRoot":"","sources":["../../src/core/remover.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remover.js","sourceRoot":"","sources":["../../src/core/remover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RemovalRecord } from './removalRecorder';
|
|
1
|
+
import { RemovalRecord } from './removalRecorder.js';
|
|
2
2
|
export declare const REMOVAL_DISCLAIMER = "\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n\u2551 \u2551\n\u2551 \u26A0\uFE0F IMPORTANT DISCLAIMER \u26A0\uFE0F \u2551\n\u2551 \u2551\n\u2551 AppClean is provided \"AS IS\" without any warranties or representations. \u2551\n\u2551 \u2551\n\u2551 By using this tool, you acknowledge and agree that: \u2551\n\u2551 \u2551\n\u2551 1. AppClean provides functionality to detect and remove applications \u2551\n\u2551 and their associated files from your system. \u2551\n\u2551 \u2551\n\u2551 2. Data deletion is PERMANENT and IRREVERSIBLE. Please ensure you have \u2551\n\u2551 created backups of any important data before using this tool. \u2551\n\u2551 \u2551\n\u2551 3. While AppClean aims to be accurate, it may not detect all files \u2551\n\u2551 or may encounter errors during deletion. Some files may remain \u2551\n\u2551 orphaned on your system despite successful removal. \u2551\n\u2551 \u2551\n\u2551 4. AppClean developers and maintainers assume NO LIABILITY or \u2551\n\u2551 RESPONSIBILITY for any data loss, system damage, or any other \u2551\n\u2551 consequences arising from the use of this tool. \u2551\n\u2551 \u2551\n\u2551 5. You are solely responsible for verifying the safety of removal \u2551\n\u2551 operations before execution and for maintaining your own backups. \u2551\n\u2551 \u2551\n\u2551 6. By proceeding with app removal, you confirm that you understand \u2551\n\u2551 and accept these terms and conditions. \u2551\n\u2551 \u2551\n\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n";
|
|
3
3
|
export declare class ReportGenerator {
|
|
4
4
|
static generateHTMLReport(record: RemovalRecord): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportGenerator.d.ts","sourceRoot":"","sources":["../../src/core/reportGenerator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAmB,MAAM,
|
|
1
|
+
{"version":3,"file":"reportGenerator.d.ts","sourceRoot":"","sources":["../../src/core/reportGenerator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAmB,MAAM,sBAAsB,CAAC;AAGtE,eAAO,MAAM,kBAAkB,2zGA8B9B,CAAC;AAEF,qBAAa,eAAe;IAI1B,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM;IA+NxD,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM;IAqDxD,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,GAAE,MAAM,GAAG,MAAe,GAAG,MAAM;IAyBlF,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;CAUlD"}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
exports.ReportGenerator = exports.REMOVAL_DISCLAIMER = void 0;
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
-
const logger_1 = require("../utils/logger");
|
|
11
|
-
exports.REMOVAL_DISCLAIMER = `
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { formatBytes, formatDate } from '../utils/logger.js';
|
|
5
|
+
export const REMOVAL_DISCLAIMER = `
|
|
12
6
|
╔════════════════════════════════════════════════════════════════════════════╗
|
|
13
7
|
║ ║
|
|
14
8
|
║ ⚠️ IMPORTANT DISCLAIMER ⚠️ ║
|
|
@@ -39,10 +33,10 @@ exports.REMOVAL_DISCLAIMER = `
|
|
|
39
33
|
║ ║
|
|
40
34
|
╚════════════════════════════════════════════════════════════════════════════╝
|
|
41
35
|
`;
|
|
42
|
-
class ReportGenerator {
|
|
36
|
+
export class ReportGenerator {
|
|
43
37
|
static generateHTMLReport(record) {
|
|
44
|
-
const timestamp =
|
|
45
|
-
const totalFreed =
|
|
38
|
+
const timestamp = formatDate(record.timestamp);
|
|
39
|
+
const totalFreed = formatBytes(record.totalSpaceFreed);
|
|
46
40
|
let html = `
|
|
47
41
|
<!DOCTYPE html>
|
|
48
42
|
<html lang="en">
|
|
@@ -211,7 +205,7 @@ class ReportGenerator {
|
|
|
211
205
|
<tr>
|
|
212
206
|
<td><code>${artifact.path}</code></td>
|
|
213
207
|
<td>${artifact.type}</td>
|
|
214
|
-
<td>${
|
|
208
|
+
<td>${formatBytes(artifact.size)}</td>
|
|
215
209
|
<td>
|
|
216
210
|
<span class="status-${artifact.status}">
|
|
217
211
|
${artifact.status.toUpperCase()}
|
|
@@ -256,8 +250,8 @@ class ReportGenerator {
|
|
|
256
250
|
return html;
|
|
257
251
|
}
|
|
258
252
|
static generateTextReport(record) {
|
|
259
|
-
const timestamp =
|
|
260
|
-
const totalFreed =
|
|
253
|
+
const timestamp = formatDate(record.timestamp);
|
|
254
|
+
const totalFreed = formatBytes(record.totalSpaceFreed);
|
|
261
255
|
let report = `
|
|
262
256
|
═══════════════════════════════════════════════════════════════════════════════
|
|
263
257
|
📋 APPCLEAN REMOVAL REPORT
|
|
@@ -279,13 +273,13 @@ DELETED FILES & FOLDERS
|
|
|
279
273
|
record.artifactsDeleted.forEach((artifact, index) => {
|
|
280
274
|
report += `\n${index + 1}. ${artifact.path}
|
|
281
275
|
Type: ${artifact.type}
|
|
282
|
-
Size: ${
|
|
276
|
+
Size: ${formatBytes(artifact.size)}
|
|
283
277
|
Status: ${artifact.status.toUpperCase()}`;
|
|
284
278
|
if (artifact.errorMessage) {
|
|
285
279
|
report += `\n Error: ${artifact.errorMessage}`;
|
|
286
280
|
}
|
|
287
281
|
});
|
|
288
|
-
report += `\n\n${
|
|
282
|
+
report += `\n\n${REMOVAL_DISCLAIMER}`;
|
|
289
283
|
report += `
|
|
290
284
|
|
|
291
285
|
═══════════════════════════════════════════════════════════════════════════════
|
|
@@ -299,30 +293,29 @@ For support, visit: https://github.com/praveenkay/AppClean
|
|
|
299
293
|
return report;
|
|
300
294
|
}
|
|
301
295
|
static saveReport(record, format = 'html') {
|
|
302
|
-
const home =
|
|
303
|
-
const reportsDir =
|
|
304
|
-
if (!
|
|
305
|
-
|
|
296
|
+
const home = path.resolve(process.env.HOME || '/root');
|
|
297
|
+
const reportsDir = path.join(home, '.appclean-reports');
|
|
298
|
+
if (!fs.existsSync(reportsDir)) {
|
|
299
|
+
fs.mkdirSync(reportsDir, { recursive: true });
|
|
306
300
|
}
|
|
307
301
|
const timestamp = record.timestamp.getTime();
|
|
308
302
|
const filename = `${record.appName}-removal-${timestamp}.${format === 'html' ? 'html' : 'txt'}`;
|
|
309
|
-
const filepath =
|
|
303
|
+
const filepath = path.join(reportsDir, filename);
|
|
310
304
|
const content = format === 'html'
|
|
311
305
|
? this.generateHTMLReport(record)
|
|
312
306
|
: this.generateTextReport(record);
|
|
313
|
-
|
|
307
|
+
fs.writeFileSync(filepath, content, 'utf-8');
|
|
314
308
|
return filepath;
|
|
315
309
|
}
|
|
316
310
|
static displayReport(record) {
|
|
317
|
-
console.log(
|
|
318
|
-
console.log('\n' +
|
|
319
|
-
console.log(
|
|
320
|
-
console.log(
|
|
321
|
-
console.log(
|
|
322
|
-
console.log(
|
|
323
|
-
console.log(
|
|
324
|
-
console.log(
|
|
311
|
+
console.log(chalk.cyan(REMOVAL_DISCLAIMER));
|
|
312
|
+
console.log('\n' + chalk.bold('Removal Summary:'));
|
|
313
|
+
console.log(chalk.gray(` App: ${record.appName}`));
|
|
314
|
+
console.log(chalk.gray(` Method: ${record.installMethod}`));
|
|
315
|
+
console.log(chalk.gray(` Timestamp: ${formatDate(record.timestamp)}`));
|
|
316
|
+
console.log(chalk.gray(` Space Freed: ${formatBytes(record.totalSpaceFreed)}`));
|
|
317
|
+
console.log(chalk.gray(` Status: ${record.completionStatus.toUpperCase()}`));
|
|
318
|
+
console.log(chalk.gray(` Verification: ${record.verificationStatus.replace(/_/g, ' ').toUpperCase()}`));
|
|
325
319
|
}
|
|
326
320
|
}
|
|
327
|
-
exports.ReportGenerator = ReportGenerator;
|
|
328
321
|
//# sourceMappingURL=reportGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportGenerator.js","sourceRoot":"","sources":["../../src/core/reportGenerator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reportGenerator.js","sourceRoot":"","sources":["../../src/core/reportGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
exports.ScheduledCleanup = void 0;
|
|
7
|
-
const platform_1 = require("../utils/platform");
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const fs_1 = __importDefault(require("fs"));
|
|
10
|
-
const logger_1 = require("../utils/logger");
|
|
11
|
-
class ScheduledCleanup {
|
|
1
|
+
import { getHomeDir } from '../utils/platform.js';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import { Logger } from '../utils/logger.js';
|
|
5
|
+
export class ScheduledCleanup {
|
|
12
6
|
constructor() {
|
|
13
7
|
this.schedules = new Map();
|
|
14
|
-
const home =
|
|
15
|
-
this.schedulesFile =
|
|
8
|
+
const home = getHomeDir();
|
|
9
|
+
this.schedulesFile = path.join(home, '.appclean-schedules.json');
|
|
16
10
|
this.loadSchedules();
|
|
17
11
|
}
|
|
18
12
|
createSchedule(appName, frequency, options) {
|
|
@@ -28,14 +22,14 @@ class ScheduledCleanup {
|
|
|
28
22
|
};
|
|
29
23
|
this.schedules.set(id, schedule);
|
|
30
24
|
this.saveSchedules();
|
|
31
|
-
|
|
25
|
+
Logger.info(`Cleanup schedule created: ${id} for ${appName} (${frequency})`);
|
|
32
26
|
return schedule;
|
|
33
27
|
}
|
|
34
28
|
deleteSchedule(scheduleId) {
|
|
35
29
|
const deleted = this.schedules.delete(scheduleId);
|
|
36
30
|
if (deleted) {
|
|
37
31
|
this.saveSchedules();
|
|
38
|
-
|
|
32
|
+
Logger.info(`Cleanup schedule deleted: ${scheduleId}`);
|
|
39
33
|
}
|
|
40
34
|
return deleted;
|
|
41
35
|
}
|
|
@@ -50,7 +44,7 @@ class ScheduledCleanup {
|
|
|
50
44
|
if (schedule) {
|
|
51
45
|
Object.assign(schedule, updates);
|
|
52
46
|
this.saveSchedules();
|
|
53
|
-
|
|
47
|
+
Logger.info(`Cleanup schedule updated: ${scheduleId}`);
|
|
54
48
|
return true;
|
|
55
49
|
}
|
|
56
50
|
return false;
|
|
@@ -60,7 +54,7 @@ class ScheduledCleanup {
|
|
|
60
54
|
if (schedule) {
|
|
61
55
|
schedule.enabled = enabled;
|
|
62
56
|
this.saveSchedules();
|
|
63
|
-
|
|
57
|
+
Logger.info(`Cleanup schedule ${scheduleId} ${enabled ? 'enabled' : 'disabled'}`);
|
|
64
58
|
}
|
|
65
59
|
}
|
|
66
60
|
calculateNextRun(schedule) {
|
|
@@ -89,20 +83,20 @@ class ScheduledCleanup {
|
|
|
89
83
|
});
|
|
90
84
|
}
|
|
91
85
|
recordResult(result) {
|
|
92
|
-
const home =
|
|
93
|
-
const resultsDir =
|
|
94
|
-
if (!
|
|
95
|
-
|
|
86
|
+
const home = getHomeDir();
|
|
87
|
+
const resultsDir = path.join(home, '.appclean-cleanup-results');
|
|
88
|
+
if (!fs.existsSync(resultsDir)) {
|
|
89
|
+
fs.mkdirSync(resultsDir, { recursive: true });
|
|
96
90
|
}
|
|
97
91
|
const filename = `${result.scheduleId}-${result.timestamp.getTime()}.json`;
|
|
98
|
-
const filepath =
|
|
99
|
-
|
|
100
|
-
|
|
92
|
+
const filepath = path.join(resultsDir, filename);
|
|
93
|
+
fs.writeFileSync(filepath, JSON.stringify(result, null, 2), 'utf-8');
|
|
94
|
+
Logger.debug(`Cleanup result recorded: ${filepath}`);
|
|
101
95
|
}
|
|
102
96
|
loadSchedules() {
|
|
103
97
|
try {
|
|
104
|
-
if (
|
|
105
|
-
const content =
|
|
98
|
+
if (fs.existsSync(this.schedulesFile)) {
|
|
99
|
+
const content = fs.readFileSync(this.schedulesFile, 'utf-8');
|
|
106
100
|
const data = JSON.parse(content);
|
|
107
101
|
for (const schedule of data) {
|
|
108
102
|
this.schedules.set(schedule.id, schedule);
|
|
@@ -110,18 +104,17 @@ class ScheduledCleanup {
|
|
|
110
104
|
}
|
|
111
105
|
}
|
|
112
106
|
catch (error) {
|
|
113
|
-
|
|
107
|
+
Logger.debug(`Failed to load schedules: ${error.message}`);
|
|
114
108
|
}
|
|
115
109
|
}
|
|
116
110
|
saveSchedules() {
|
|
117
111
|
try {
|
|
118
112
|
const data = Array.from(this.schedules.values());
|
|
119
|
-
|
|
113
|
+
fs.writeFileSync(this.schedulesFile, JSON.stringify(data, null, 2), 'utf-8');
|
|
120
114
|
}
|
|
121
115
|
catch (error) {
|
|
122
|
-
|
|
116
|
+
Logger.error(`Failed to save schedules: ${error.message}`);
|
|
123
117
|
}
|
|
124
118
|
}
|
|
125
119
|
}
|
|
126
|
-
exports.ScheduledCleanup = ScheduledCleanup;
|
|
127
120
|
//# sourceMappingURL=scheduledCleanup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduledCleanup.js","sourceRoot":"","sources":["../../src/core/scheduledCleanup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scheduledCleanup.js","sourceRoot":"","sources":["../../src/core/scheduledCleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ServiceFileDetector = void 0;
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const platform_1 = require("../utils/platform");
|
|
9
|
-
const filesystem_1 = require("../utils/filesystem");
|
|
10
|
-
class ServiceFileDetector {
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { isMacOS, isLinux, getHomeDir } from '../utils/platform.js';
|
|
3
|
+
import { pathExists, readFile, listDirectory } from '../utils/filesystem.js';
|
|
4
|
+
export class ServiceFileDetector {
|
|
11
5
|
async findServiceFiles(appName) {
|
|
12
6
|
const serviceFiles = [];
|
|
13
|
-
if (
|
|
7
|
+
if (isMacOS()) {
|
|
14
8
|
serviceFiles.push(...(await this.findMacOSServiceFiles(appName)));
|
|
15
9
|
}
|
|
16
|
-
if (
|
|
10
|
+
if (isLinux()) {
|
|
17
11
|
serviceFiles.push(...(await this.findLinuxServiceFiles(appName)));
|
|
18
12
|
}
|
|
19
13
|
return serviceFiles;
|
|
20
14
|
}
|
|
21
15
|
async findMacOSServiceFiles(appName) {
|
|
22
|
-
const home =
|
|
16
|
+
const home = getHomeDir();
|
|
23
17
|
const serviceFiles = [];
|
|
24
|
-
const launchAgentsPath =
|
|
25
|
-
if (
|
|
26
|
-
const agents =
|
|
18
|
+
const launchAgentsPath = path.join(home, 'Library', 'LaunchAgents');
|
|
19
|
+
if (pathExists(launchAgentsPath)) {
|
|
20
|
+
const agents = listDirectory(launchAgentsPath);
|
|
27
21
|
for (const agent of agents) {
|
|
28
22
|
if (agent.toLowerCase().includes(appName.toLowerCase())) {
|
|
29
|
-
const fullPath =
|
|
23
|
+
const fullPath = path.join(launchAgentsPath, agent);
|
|
30
24
|
serviceFiles.push({
|
|
31
25
|
path: fullPath,
|
|
32
26
|
type: 'launchagent',
|
|
@@ -37,12 +31,12 @@ class ServiceFileDetector {
|
|
|
37
31
|
}
|
|
38
32
|
}
|
|
39
33
|
}
|
|
40
|
-
const launchDaemonsPath =
|
|
41
|
-
if (
|
|
42
|
-
const daemons =
|
|
34
|
+
const launchDaemonsPath = path.join(home, 'Library', 'LaunchDaemons');
|
|
35
|
+
if (pathExists(launchDaemonsPath)) {
|
|
36
|
+
const daemons = listDirectory(launchDaemonsPath);
|
|
43
37
|
for (const daemon of daemons) {
|
|
44
38
|
if (daemon.toLowerCase().includes(appName.toLowerCase())) {
|
|
45
|
-
const fullPath =
|
|
39
|
+
const fullPath = path.join(launchDaemonsPath, daemon);
|
|
46
40
|
serviceFiles.push({
|
|
47
41
|
path: fullPath,
|
|
48
42
|
type: 'launchdaemon',
|
|
@@ -56,14 +50,14 @@ class ServiceFileDetector {
|
|
|
56
50
|
return serviceFiles;
|
|
57
51
|
}
|
|
58
52
|
async findLinuxServiceFiles(appName) {
|
|
59
|
-
const home =
|
|
53
|
+
const home = getHomeDir();
|
|
60
54
|
const serviceFiles = [];
|
|
61
|
-
const userSystemdPath =
|
|
62
|
-
if (
|
|
63
|
-
const services =
|
|
55
|
+
const userSystemdPath = path.join(home, '.config', 'systemd', 'user');
|
|
56
|
+
if (pathExists(userSystemdPath)) {
|
|
57
|
+
const services = listDirectory(userSystemdPath);
|
|
64
58
|
for (const service of services) {
|
|
65
59
|
if (service.includes(appName)) {
|
|
66
|
-
const fullPath =
|
|
60
|
+
const fullPath = path.join(userSystemdPath, service);
|
|
67
61
|
serviceFiles.push({
|
|
68
62
|
path: fullPath,
|
|
69
63
|
type: 'systemd',
|
|
@@ -75,12 +69,12 @@ class ServiceFileDetector {
|
|
|
75
69
|
}
|
|
76
70
|
}
|
|
77
71
|
const systemServicePath = '/etc/systemd/system';
|
|
78
|
-
if (
|
|
72
|
+
if (pathExists(systemServicePath)) {
|
|
79
73
|
try {
|
|
80
|
-
const services =
|
|
74
|
+
const services = listDirectory(systemServicePath);
|
|
81
75
|
for (const service of services) {
|
|
82
76
|
if (service.includes(appName)) {
|
|
83
|
-
const fullPath =
|
|
77
|
+
const fullPath = path.join(systemServicePath, service);
|
|
84
78
|
serviceFiles.push({
|
|
85
79
|
path: fullPath,
|
|
86
80
|
type: 'service',
|
|
@@ -98,7 +92,7 @@ class ServiceFileDetector {
|
|
|
98
92
|
}
|
|
99
93
|
checkDependencies(filePath, appName) {
|
|
100
94
|
try {
|
|
101
|
-
const content =
|
|
95
|
+
const content = readFile(filePath);
|
|
102
96
|
if (!content)
|
|
103
97
|
return false;
|
|
104
98
|
return (content.includes('KeepAlive') ||
|
|
@@ -132,5 +126,4 @@ class ServiceFileDetector {
|
|
|
132
126
|
return instructions;
|
|
133
127
|
}
|
|
134
128
|
}
|
|
135
|
-
exports.ServiceFileDetector = ServiceFileDetector;
|
|
136
129
|
//# sourceMappingURL=serviceFileDetector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceFileDetector.js","sourceRoot":"","sources":["../../src/core/serviceFileDetector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serviceFileDetector.js","sourceRoot":"","sources":["../../src/core/serviceFileDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const platform_1 = require("../utils/platform");
|
|
6
|
-
const filesystem_1 = require("../utils/filesystem");
|
|
7
|
-
class VerificationModule {
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { isMacOS, isLinux, isWindows } from '../utils/platform.js';
|
|
3
|
+
import { pathExists } from '../utils/filesystem.js';
|
|
4
|
+
export class VerificationModule {
|
|
8
5
|
async verifyRemoval(appName, artifactPaths) {
|
|
9
6
|
const result = {
|
|
10
7
|
status: 'unknown',
|
|
@@ -13,7 +10,7 @@ class VerificationModule {
|
|
|
13
10
|
timestamp: new Date(),
|
|
14
11
|
};
|
|
15
12
|
try {
|
|
16
|
-
const remainingPaths = artifactPaths.filter((path) =>
|
|
13
|
+
const remainingPaths = artifactPaths.filter((path) => pathExists(path));
|
|
17
14
|
result.remainingPaths = remainingPaths;
|
|
18
15
|
const commandStatus = await this.verifyViaCommand(appName);
|
|
19
16
|
result.commandOutput = commandStatus;
|
|
@@ -38,9 +35,9 @@ class VerificationModule {
|
|
|
38
35
|
}
|
|
39
36
|
async verifyViaCommand(appName) {
|
|
40
37
|
try {
|
|
41
|
-
if (
|
|
38
|
+
if (isMacOS() || isLinux()) {
|
|
42
39
|
try {
|
|
43
|
-
const output =
|
|
40
|
+
const output = execSync(`which ${appName} 2>/dev/null || true`).toString().trim();
|
|
44
41
|
if (output) {
|
|
45
42
|
return `Found at: ${output}`;
|
|
46
43
|
}
|
|
@@ -48,16 +45,16 @@ class VerificationModule {
|
|
|
48
45
|
catch {
|
|
49
46
|
}
|
|
50
47
|
try {
|
|
51
|
-
|
|
48
|
+
execSync(`${appName} --version 2>/dev/null || true`).toString().trim();
|
|
52
49
|
return `App still responds to --version`;
|
|
53
50
|
}
|
|
54
51
|
catch {
|
|
55
52
|
}
|
|
56
53
|
return '';
|
|
57
54
|
}
|
|
58
|
-
if (
|
|
55
|
+
if (isWindows()) {
|
|
59
56
|
try {
|
|
60
|
-
const output =
|
|
57
|
+
const output = execSync(`where ${appName} 2>nul || echo ""`).toString().trim();
|
|
61
58
|
if (output && output !== '""') {
|
|
62
59
|
return `Found at: ${output}`;
|
|
63
60
|
}
|
|
@@ -98,5 +95,4 @@ class VerificationModule {
|
|
|
98
95
|
return report;
|
|
99
96
|
}
|
|
100
97
|
}
|
|
101
|
-
exports.VerificationModule = VerificationModule;
|
|
102
98
|
//# sourceMappingURL=verificationModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verificationModule.js","sourceRoot":"","sources":["../../src/core/verificationModule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verificationModule.js","sourceRoot":"","sources":["../../src/core/verificationModule.ts"],"names":[],"mappings":"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"}
|