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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orphanedDependencyDetector.js","sourceRoot":"","sources":["../../src/core/orphanedDependencyDetector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"orphanedDependencyDetector.js","sourceRoot":"","sources":["../../src/core/orphanedDependencyDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.PerformanceOptimizer = void 0;
|
|
4
|
-
const logger_1 = require("../utils/logger");
|
|
5
|
-
class PerformanceOptimizer {
|
|
1
|
+
import { Logger } from '../utils/logger.js';
|
|
2
|
+
export class PerformanceOptimizer {
|
|
6
3
|
constructor(settings) {
|
|
7
4
|
this.metrics = new Map();
|
|
8
5
|
this.cache = new Map();
|
|
@@ -26,7 +23,7 @@ class PerformanceOptimizer {
|
|
|
26
23
|
scanSpeed: 0,
|
|
27
24
|
};
|
|
28
25
|
this.metrics.set(scanId, metrics);
|
|
29
|
-
|
|
26
|
+
Logger.debug(`Performance metrics started: ${scanId}`);
|
|
30
27
|
return metrics;
|
|
31
28
|
}
|
|
32
29
|
endMetrics(scanId) {
|
|
@@ -36,7 +33,7 @@ class PerformanceOptimizer {
|
|
|
36
33
|
metrics.duration = metrics.endTime.getTime() - metrics.startTime.getTime();
|
|
37
34
|
metrics.averageFileSize = metrics.filesScanned > 0 ? metrics.totalSize / metrics.filesScanned : 0;
|
|
38
35
|
metrics.scanSpeed = metrics.duration > 0 ? (metrics.filesScanned / metrics.duration) * 1000 : 0;
|
|
39
|
-
|
|
36
|
+
Logger.info(`
|
|
40
37
|
Performance Report: ${scanId}
|
|
41
38
|
Duration: ${(metrics.duration / 1000).toFixed(2)}s
|
|
42
39
|
Files scanned: ${metrics.filesScanned}
|
|
@@ -79,11 +76,11 @@ Performance Report: ${scanId}
|
|
|
79
76
|
}
|
|
80
77
|
clearCache() {
|
|
81
78
|
this.cache.clear();
|
|
82
|
-
|
|
79
|
+
Logger.debug('Performance cache cleared');
|
|
83
80
|
}
|
|
84
81
|
updateSettings(settings) {
|
|
85
82
|
Object.assign(this.settings, settings);
|
|
86
|
-
|
|
83
|
+
Logger.debug('Performance optimization settings updated');
|
|
87
84
|
}
|
|
88
85
|
getSettings() {
|
|
89
86
|
return { ...this.settings };
|
|
@@ -124,5 +121,4 @@ Performance Report: ${scanId}
|
|
|
124
121
|
return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];
|
|
125
122
|
}
|
|
126
123
|
}
|
|
127
|
-
exports.PerformanceOptimizer = PerformanceOptimizer;
|
|
128
124
|
//# sourceMappingURL=performanceOptimizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performanceOptimizer.js","sourceRoot":"","sources":["../../src/core/performanceOptimizer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"performanceOptimizer.js","sourceRoot":"","sources":["../../src/core/performanceOptimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const platform_1 = require("../utils/platform");
|
|
6
|
-
const logger_1 = require("../utils/logger");
|
|
7
|
-
class PermissionHandler {
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { isMacOS, isLinux, isWindows } from '../utils/platform.js';
|
|
3
|
+
import { Logger } from '../utils/logger.js';
|
|
4
|
+
export class PermissionHandler {
|
|
8
5
|
static isElevated() {
|
|
9
6
|
try {
|
|
10
|
-
if (
|
|
11
|
-
const uid =
|
|
7
|
+
if (isMacOS() || isLinux()) {
|
|
8
|
+
const uid = execSync('id -u').toString().trim();
|
|
12
9
|
return uid === '0';
|
|
13
10
|
}
|
|
14
|
-
if (
|
|
15
|
-
const output =
|
|
11
|
+
if (isWindows()) {
|
|
12
|
+
const output = execSync('net session').toString().trim();
|
|
16
13
|
return output.length > 0;
|
|
17
14
|
}
|
|
18
15
|
return false;
|
|
@@ -23,20 +20,20 @@ class PermissionHandler {
|
|
|
23
20
|
}
|
|
24
21
|
static async requestElevatedPermissions() {
|
|
25
22
|
try {
|
|
26
|
-
if (
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
if (isMacOS() || isLinux()) {
|
|
24
|
+
Logger.warn('This operation requires elevated permissions');
|
|
25
|
+
Logger.info('You may be prompted for your password (sudo)');
|
|
29
26
|
return true;
|
|
30
27
|
}
|
|
31
|
-
if (
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
if (isWindows()) {
|
|
29
|
+
Logger.warn('This operation requires administrator privileges');
|
|
30
|
+
Logger.info('Please run AppClean as Administrator');
|
|
34
31
|
return false;
|
|
35
32
|
}
|
|
36
33
|
return false;
|
|
37
34
|
}
|
|
38
35
|
catch (error) {
|
|
39
|
-
|
|
36
|
+
Logger.error(`Permission request failed: ${error.message}`);
|
|
40
37
|
return false;
|
|
41
38
|
}
|
|
42
39
|
}
|
|
@@ -61,29 +58,28 @@ class PermissionHandler {
|
|
|
61
58
|
return paths.some((path) => this.pathRequiresElevation(path));
|
|
62
59
|
}
|
|
63
60
|
static getSudoCommand() {
|
|
64
|
-
if (
|
|
61
|
+
if (isMacOS() || isLinux()) {
|
|
65
62
|
return 'sudo';
|
|
66
63
|
}
|
|
67
|
-
if (
|
|
64
|
+
if (isWindows()) {
|
|
68
65
|
return 'runas /user:Administrator';
|
|
69
66
|
}
|
|
70
67
|
return '';
|
|
71
68
|
}
|
|
72
69
|
static executeWithElevation(command) {
|
|
73
70
|
try {
|
|
74
|
-
if (
|
|
71
|
+
if (isMacOS() || isLinux()) {
|
|
75
72
|
return '';
|
|
76
73
|
}
|
|
77
|
-
if (
|
|
78
|
-
return
|
|
74
|
+
if (isWindows()) {
|
|
75
|
+
return execSync(`runas /noprofile /user:Administrator "${command}"`).toString();
|
|
79
76
|
}
|
|
80
77
|
return '';
|
|
81
78
|
}
|
|
82
79
|
catch (error) {
|
|
83
|
-
|
|
80
|
+
Logger.error(`Elevated execution failed: ${error.message}`);
|
|
84
81
|
return '';
|
|
85
82
|
}
|
|
86
83
|
}
|
|
87
84
|
}
|
|
88
|
-
exports.PermissionHandler = PermissionHandler;
|
|
89
85
|
//# sourceMappingURL=permissionHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionHandler.js","sourceRoot":"","sources":["../../src/core/permissionHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"permissionHandler.js","sourceRoot":"","sources":["../../src/core/permissionHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.PluginSystem = void 0;
|
|
4
|
-
const logger_1 = require("../utils/logger");
|
|
5
|
-
class PluginSystem {
|
|
1
|
+
import { Logger } from '../utils/logger.js';
|
|
2
|
+
export class PluginSystem {
|
|
6
3
|
constructor() {
|
|
7
4
|
this.plugins = new Map();
|
|
8
5
|
this.pluginConfigs = new Map();
|
|
@@ -10,12 +7,12 @@ class PluginSystem {
|
|
|
10
7
|
registerPlugin(plugin, config) {
|
|
11
8
|
this.plugins.set(plugin.name, plugin);
|
|
12
9
|
this.pluginConfigs.set(plugin.name, config || { enabled: true });
|
|
13
|
-
|
|
10
|
+
Logger.info(`Plugin registered: ${plugin.name} v${plugin.version}`);
|
|
14
11
|
}
|
|
15
12
|
unregisterPlugin(pluginName) {
|
|
16
13
|
this.plugins.delete(pluginName);
|
|
17
14
|
this.pluginConfigs.delete(pluginName);
|
|
18
|
-
|
|
15
|
+
Logger.info(`Plugin unregistered: ${pluginName}`);
|
|
19
16
|
}
|
|
20
17
|
getPlugins() {
|
|
21
18
|
return Array.from(this.plugins.values());
|
|
@@ -33,7 +30,7 @@ class PluginSystem {
|
|
|
33
30
|
results.set(name, detected);
|
|
34
31
|
}
|
|
35
32
|
catch (error) {
|
|
36
|
-
|
|
33
|
+
Logger.debug(`Plugin ${name} detection failed: ${error.message}`);
|
|
37
34
|
results.set(name, false);
|
|
38
35
|
}
|
|
39
36
|
}
|
|
@@ -50,7 +47,7 @@ class PluginSystem {
|
|
|
50
47
|
results.set(name, artifacts);
|
|
51
48
|
}
|
|
52
49
|
catch (error) {
|
|
53
|
-
|
|
50
|
+
Logger.debug(`Plugin ${name} artifact finding failed: ${error.message}`);
|
|
54
51
|
results.set(name, []);
|
|
55
52
|
}
|
|
56
53
|
}
|
|
@@ -69,7 +66,7 @@ class PluginSystem {
|
|
|
69
66
|
results.set(pluginName, removed);
|
|
70
67
|
}
|
|
71
68
|
catch (error) {
|
|
72
|
-
|
|
69
|
+
Logger.debug(`Plugin ${pluginName} removal failed: ${error.message}`);
|
|
73
70
|
results.set(pluginName, false);
|
|
74
71
|
}
|
|
75
72
|
}
|
|
@@ -84,7 +81,7 @@ class PluginSystem {
|
|
|
84
81
|
results.set(name, removed);
|
|
85
82
|
}
|
|
86
83
|
catch (error) {
|
|
87
|
-
|
|
84
|
+
Logger.debug(`Plugin ${name} removal failed: ${error.message}`);
|
|
88
85
|
results.set(name, false);
|
|
89
86
|
}
|
|
90
87
|
}
|
|
@@ -96,7 +93,7 @@ class PluginSystem {
|
|
|
96
93
|
const config = this.pluginConfigs.get(pluginName);
|
|
97
94
|
if (config) {
|
|
98
95
|
config.enabled = enabled;
|
|
99
|
-
|
|
96
|
+
Logger.info(`Plugin ${pluginName} ${enabled ? 'enabled' : 'disabled'}`);
|
|
100
97
|
}
|
|
101
98
|
}
|
|
102
99
|
getPluginConfig(pluginName) {
|
|
@@ -116,5 +113,4 @@ class PluginSystem {
|
|
|
116
113
|
return Array.from(this.plugins.values()).map((p) => p.getInfo());
|
|
117
114
|
}
|
|
118
115
|
}
|
|
119
|
-
exports.PluginSystem = PluginSystem;
|
|
120
116
|
//# sourceMappingURL=pluginSystem.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluginSystem.js","sourceRoot":"","sources":["../../src/core/pluginSystem.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pluginSystem.js","sourceRoot":"","sources":["../../src/core/pluginSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.RemovalRecorder = void 0;
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const platform_1 = require("../utils/platform");
|
|
10
|
-
class RemovalRecorder {
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { getHomeDir } from '../utils/platform.js';
|
|
4
|
+
export class RemovalRecorder {
|
|
11
5
|
constructor() {
|
|
12
|
-
const home =
|
|
13
|
-
this.recordsDir =
|
|
14
|
-
if (!
|
|
15
|
-
|
|
6
|
+
const home = getHomeDir();
|
|
7
|
+
this.recordsDir = path.join(home, '.appclean-records');
|
|
8
|
+
if (!fs.existsSync(this.recordsDir)) {
|
|
9
|
+
fs.mkdirSync(this.recordsDir, { recursive: true });
|
|
16
10
|
}
|
|
17
11
|
}
|
|
18
12
|
createRecord(appName, installMethod, userConsent) {
|
|
@@ -47,17 +41,17 @@ class RemovalRecorder {
|
|
|
47
41
|
}
|
|
48
42
|
saveRecord(record) {
|
|
49
43
|
const filename = `${record.appName}-${record.timestamp.getTime()}.json`;
|
|
50
|
-
const filepath =
|
|
51
|
-
|
|
44
|
+
const filepath = path.join(this.recordsDir, filename);
|
|
45
|
+
fs.writeFileSync(filepath, JSON.stringify(record, null, 2), 'utf-8');
|
|
52
46
|
return filepath;
|
|
53
47
|
}
|
|
54
48
|
getAllRecords() {
|
|
55
|
-
const files =
|
|
49
|
+
const files = fs.readdirSync(this.recordsDir);
|
|
56
50
|
const records = [];
|
|
57
51
|
for (const file of files) {
|
|
58
52
|
if (file.endsWith('.json')) {
|
|
59
53
|
try {
|
|
60
|
-
const content =
|
|
54
|
+
const content = fs.readFileSync(path.join(this.recordsDir, file), 'utf-8');
|
|
61
55
|
const record = JSON.parse(content);
|
|
62
56
|
record.timestamp = new Date(record.timestamp);
|
|
63
57
|
records.push(record);
|
|
@@ -75,5 +69,4 @@ class RemovalRecorder {
|
|
|
75
69
|
return this.recordsDir;
|
|
76
70
|
}
|
|
77
71
|
}
|
|
78
|
-
exports.RemovalRecorder = RemovalRecorder;
|
|
79
72
|
//# sourceMappingURL=removalRecorder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removalRecorder.js","sourceRoot":"","sources":["../../src/core/removalRecorder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"removalRecorder.js","sourceRoot":"","sources":["../../src/core/removalRecorder.ts"],"names":[],"mappings":"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"}
|
package/dist/core/remover.js
CHANGED
|
@@ -1,49 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const permissionHandler_1 = require("./permissionHandler");
|
|
16
|
-
const serviceFileDetector_1 = require("./serviceFileDetector");
|
|
17
|
-
const removalRecorder_1 = require("./removalRecorder");
|
|
18
|
-
const reportGenerator_1 = require("./reportGenerator");
|
|
19
|
-
const verificationModule_1 = require("./verificationModule");
|
|
20
|
-
class Remover {
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { getHomeDir } from '../utils/platform.js';
|
|
4
|
+
import { deleteFile, deleteDirectory, pathExists, } from '../utils/filesystem.js';
|
|
5
|
+
import { Logger, formatBytes } from '../utils/logger.js';
|
|
6
|
+
import { NpmManager } from '../managers/npmManager.js';
|
|
7
|
+
import { BrewManager } from '../managers/brewManager.js';
|
|
8
|
+
import { LinuxManager } from '../managers/linuxManager.js';
|
|
9
|
+
import { PermissionHandler } from './permissionHandler.js';
|
|
10
|
+
import { ServiceFileDetector } from './serviceFileDetector.js';
|
|
11
|
+
import { RemovalRecorder } from './removalRecorder.js';
|
|
12
|
+
import { ReportGenerator } from './reportGenerator.js';
|
|
13
|
+
import { VerificationModule } from './verificationModule.js';
|
|
14
|
+
export class Remover {
|
|
21
15
|
async previewRemoval(artifacts) {
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
Logger.info('Files to be removed:');
|
|
17
|
+
Logger.space();
|
|
24
18
|
let totalSize = 0;
|
|
25
19
|
for (const artifact of artifacts) {
|
|
26
20
|
const size = artifact.size || 0;
|
|
27
21
|
totalSize += size;
|
|
28
|
-
console.log(` ${artifact.type.padEnd(8)} ${
|
|
22
|
+
console.log(` ${artifact.type.padEnd(8)} ${formatBytes(size).padEnd(10)} ${artifact.path}`);
|
|
29
23
|
}
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
Logger.space();
|
|
25
|
+
Logger.info(`Total space to be freed: ${formatBytes(totalSize)}`);
|
|
32
26
|
}
|
|
33
27
|
async createBackup(appName, artifacts) {
|
|
34
|
-
const home =
|
|
35
|
-
const backupDir =
|
|
28
|
+
const home = getHomeDir();
|
|
29
|
+
const backupDir = path.join(home, '.appclean-backups');
|
|
36
30
|
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
37
|
-
const backupPath =
|
|
31
|
+
const backupPath = path.join(backupDir, `${appName}-${timestamp}.tar.gz`);
|
|
38
32
|
try {
|
|
39
|
-
|
|
33
|
+
execSync(`mkdir -p "${backupDir}"`);
|
|
40
34
|
const filePaths = artifacts.map((a) => `"${a.path}"`).join(' ');
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
execSync(`tar -czf "${backupPath}" ${filePaths} 2>/dev/null || true`);
|
|
36
|
+
Logger.success(`Backup created: ${backupPath}`);
|
|
43
37
|
return backupPath;
|
|
44
38
|
}
|
|
45
39
|
catch (error) {
|
|
46
|
-
|
|
40
|
+
Logger.warn(`Failed to create backup: ${error.message}`);
|
|
47
41
|
return '';
|
|
48
42
|
}
|
|
49
43
|
}
|
|
@@ -53,12 +47,12 @@ class Remover {
|
|
|
53
47
|
let failed = 0;
|
|
54
48
|
for (const artifact of artifacts) {
|
|
55
49
|
try {
|
|
56
|
-
if (!
|
|
50
|
+
if (!pathExists(artifact.path)) {
|
|
57
51
|
continue;
|
|
58
52
|
}
|
|
59
53
|
const isDirectory = this.isDirectory(artifact.path);
|
|
60
54
|
if (isDirectory) {
|
|
61
|
-
const deleted =
|
|
55
|
+
const deleted = deleteDirectory(artifact.path);
|
|
62
56
|
if (deleted) {
|
|
63
57
|
success++;
|
|
64
58
|
}
|
|
@@ -68,7 +62,7 @@ class Remover {
|
|
|
68
62
|
}
|
|
69
63
|
}
|
|
70
64
|
else {
|
|
71
|
-
const deleted =
|
|
65
|
+
const deleted = deleteFile(artifact.path);
|
|
72
66
|
if (deleted) {
|
|
73
67
|
success++;
|
|
74
68
|
}
|
|
@@ -93,22 +87,22 @@ class Remover {
|
|
|
93
87
|
freedSpace: 0,
|
|
94
88
|
errors: [],
|
|
95
89
|
};
|
|
96
|
-
const recorder = new
|
|
97
|
-
const verificationModule = new
|
|
98
|
-
const serviceDetector = new
|
|
99
|
-
const reportGenerator = new
|
|
90
|
+
const recorder = new RemovalRecorder();
|
|
91
|
+
const verificationModule = new VerificationModule();
|
|
92
|
+
const serviceDetector = new ServiceFileDetector();
|
|
93
|
+
const reportGenerator = new ReportGenerator();
|
|
100
94
|
let removalRecord = null;
|
|
101
95
|
const artifactPaths = artifacts.map((a) => a.path);
|
|
102
96
|
try {
|
|
103
|
-
const requiresElevation =
|
|
104
|
-
if (requiresElevation && !
|
|
105
|
-
await
|
|
106
|
-
|
|
97
|
+
const requiresElevation = PermissionHandler.installationRequiresElevation(installMethod, artifactPaths);
|
|
98
|
+
if (requiresElevation && !PermissionHandler.isElevated()) {
|
|
99
|
+
await PermissionHandler.requestElevatedPermissions();
|
|
100
|
+
Logger.warn('Please run this command with sudo for complete removal of system packages');
|
|
107
101
|
}
|
|
108
102
|
const serviceFiles = await serviceDetector.findServiceFiles(appName);
|
|
109
103
|
if (serviceFiles.length > 0) {
|
|
110
|
-
|
|
111
|
-
|
|
104
|
+
Logger.info('\n⚠️ Manual Cleanup Required:');
|
|
105
|
+
Logger.info('The following service files require manual cleanup:');
|
|
112
106
|
serviceFiles.forEach((file, index) => {
|
|
113
107
|
console.log(`\n${index + 1}. ${file.type.toUpperCase()}`);
|
|
114
108
|
console.log(` Path: ${file.path}`);
|
|
@@ -126,7 +120,7 @@ class Remover {
|
|
|
126
120
|
}
|
|
127
121
|
const removed = await this.removeViaPackageManager(appName, installMethod);
|
|
128
122
|
if (!removed) {
|
|
129
|
-
|
|
123
|
+
Logger.warn(`Package manager removal failed, attempting manual file removal...`);
|
|
130
124
|
}
|
|
131
125
|
const removalResult = await this.removeArtifacts(artifacts, options);
|
|
132
126
|
artifacts.forEach((artifact, index) => {
|
|
@@ -139,32 +133,32 @@ class Remover {
|
|
|
139
133
|
result.freedSpace = artifacts.reduce((total, a) => total + (a.size || 0), 0);
|
|
140
134
|
const verificationResult = await verificationModule.verifyRemoval(appName, artifactPaths);
|
|
141
135
|
recorder.updateVerificationStatus(removalRecord, verificationResult.status);
|
|
142
|
-
|
|
136
|
+
Logger.info(`\n${verificationModule.getStatusMessage(verificationResult.status)}`);
|
|
143
137
|
if (removalResult.failed === 0) {
|
|
144
138
|
result.success = true;
|
|
145
139
|
recorder.updateCompletionStatus(removalRecord, 'success');
|
|
146
|
-
|
|
140
|
+
Logger.success(`Successfully removed ${appName}`);
|
|
147
141
|
}
|
|
148
142
|
else {
|
|
149
143
|
recorder.updateCompletionStatus(removalRecord, removalResult.failed === removalResult.success + removalResult.failed ? 'partial' : 'failed');
|
|
150
|
-
|
|
144
|
+
Logger.warn(`Removed ${appName} with ${removalResult.failed} errors`);
|
|
151
145
|
}
|
|
152
146
|
if (removalRecord) {
|
|
153
147
|
const recordPath = recorder.saveRecord(removalRecord);
|
|
154
|
-
|
|
155
|
-
const reportPath =
|
|
156
|
-
|
|
157
|
-
|
|
148
|
+
Logger.debug(`Removal record saved to: ${recordPath}`);
|
|
149
|
+
const reportPath = ReportGenerator.saveReport(removalRecord, options.reportFormat ?? 'html');
|
|
150
|
+
Logger.success(`Report generated: ${reportPath}`);
|
|
151
|
+
ReportGenerator.displayReport(removalRecord);
|
|
158
152
|
}
|
|
159
153
|
}
|
|
160
154
|
catch (error) {
|
|
161
155
|
result.success = false;
|
|
162
156
|
result.errors?.push(error.message);
|
|
163
|
-
|
|
157
|
+
Logger.error(`Failed to remove ${appName}: ${error.message}`);
|
|
164
158
|
if (removalRecord) {
|
|
165
159
|
recorder.updateCompletionStatus(removalRecord, 'failed');
|
|
166
160
|
const recordPath = recorder.saveRecord(removalRecord);
|
|
167
|
-
|
|
161
|
+
Logger.debug(`Failed removal record saved to: ${recordPath}`);
|
|
168
162
|
}
|
|
169
163
|
}
|
|
170
164
|
return result;
|
|
@@ -173,17 +167,17 @@ class Remover {
|
|
|
173
167
|
try {
|
|
174
168
|
switch (installMethod) {
|
|
175
169
|
case 'npm': {
|
|
176
|
-
const npm = new
|
|
170
|
+
const npm = new NpmManager();
|
|
177
171
|
return await npm.removePackage(appName);
|
|
178
172
|
}
|
|
179
173
|
case 'brew': {
|
|
180
|
-
const brew = new
|
|
174
|
+
const brew = new BrewManager();
|
|
181
175
|
return await brew.removePackage(appName);
|
|
182
176
|
}
|
|
183
177
|
case 'apt':
|
|
184
178
|
case 'yum':
|
|
185
179
|
case 'dnf': {
|
|
186
|
-
const linux = new
|
|
180
|
+
const linux = new LinuxManager();
|
|
187
181
|
return await linux.removePackage(appName);
|
|
188
182
|
}
|
|
189
183
|
default:
|
|
@@ -191,7 +185,7 @@ class Remover {
|
|
|
191
185
|
}
|
|
192
186
|
}
|
|
193
187
|
catch (error) {
|
|
194
|
-
|
|
188
|
+
Logger.debug(`Package manager removal failed: ${error.message}`);
|
|
195
189
|
return false;
|
|
196
190
|
}
|
|
197
191
|
}
|
|
@@ -206,20 +200,19 @@ class Remover {
|
|
|
206
200
|
}
|
|
207
201
|
async rollback(backupPath) {
|
|
208
202
|
try {
|
|
209
|
-
if (!
|
|
210
|
-
|
|
203
|
+
if (!pathExists(backupPath)) {
|
|
204
|
+
Logger.error(`Backup file not found: ${backupPath}`);
|
|
211
205
|
return false;
|
|
212
206
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
207
|
+
Logger.info('Restoring from backup...');
|
|
208
|
+
execSync(`tar -xzf "${backupPath}" -C /`);
|
|
209
|
+
Logger.success('Backup restored successfully');
|
|
216
210
|
return true;
|
|
217
211
|
}
|
|
218
212
|
catch (error) {
|
|
219
|
-
|
|
213
|
+
Logger.error(`Failed to restore backup: ${error.message}`);
|
|
220
214
|
return false;
|
|
221
215
|
}
|
|
222
216
|
}
|
|
223
217
|
}
|
|
224
|
-
exports.Remover = Remover;
|
|
225
218
|
//# sourceMappingURL=remover.js.map
|