appclean 1.8.0 → 2.0.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/GUI_IMPLEMENTATION_STATUS.md +143 -0
- package/MD_Files/INDEX.md +51 -0
- package/MD_Files/PUBLICATION_SUCCESS_REPORT.md +227 -0
- package/PHASE2_COMPLETION.md +281 -0
- package/PHASE3_COMPLETION.md +364 -0
- package/README.md +446 -376
- 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 +190 -90
- package/dist/index.js.map +1 -1
- package/dist/managers/brewManager.d.ts.map +1 -1
- package/dist/managers/brewManager.js +35 -41
- package/dist/managers/brewManager.js.map +1 -1
- package/dist/managers/customManager.d.ts +2 -1
- package/dist/managers/customManager.d.ts.map +1 -1
- package/dist/managers/customManager.js +79 -53
- 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 +96 -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 +71 -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 +210 -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 +154 -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 +121 -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 +70 -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 +327 -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 +8 -1
- package/dist/ui/guiServer.d.ts.map +1 -1
- package/dist/ui/guiServer.js +148 -110
- 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 +22 -0
- package/dist/utils/upgrade.d.ts.map +1 -0
- package/dist/utils/upgrade.js +94 -0
- package/dist/utils/upgrade.js.map +1 -0
- package/package.json +4 -2
- 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 +133 -6
- package/src/managers/brewManager.ts +11 -9
- package/src/managers/customManager.ts +71 -30
- package/src/managers/linuxManager.ts +3 -3
- package/src/managers/npmManager.ts +3 -3
- package/src/ui/client/api/client.ts +163 -0
- package/src/ui/client/app.ts +121 -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 +270 -0
- package/src/ui/client/pages/dashboard.ts +189 -0
- package/src/ui/client/pages/settings.ts +342 -0
- package/src/ui/client/state/appStore.ts +169 -0
- package/src/ui/client/state/dashboardStore.ts +113 -0
- package/src/ui/client/state/uiStore.ts +166 -0
- package/src/ui/client/styles/animations.css +327 -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 +206 -105
- 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 +143 -0
- 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/{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/assets/logo.svg
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<svg width="240" height="240" viewBox="0 0 240 240" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Background Circle -->
|
|
3
|
+
<circle cx="120" cy="120" r="115" fill="#0f172a" stroke="#3b82f6" stroke-width="2"/>
|
|
4
|
+
|
|
5
|
+
<!-- Briefcase Body -->
|
|
6
|
+
<rect x="55" y="70" width="130" height="90" rx="8" fill="#3b82f6"/>
|
|
7
|
+
|
|
8
|
+
<!-- Briefcase Handle -->
|
|
9
|
+
<path d="M 75 70 Q 75 40 120 40 Q 165 40 165 70" stroke="#3b82f6" stroke-width="6" fill="none" stroke-linecap="round"/>
|
|
10
|
+
|
|
11
|
+
<!-- Briefcase Shine/Highlight -->
|
|
12
|
+
<rect x="60" y="75" width="50" height="20" rx="4" fill="#60a5fa" opacity="0.6"/>
|
|
13
|
+
|
|
14
|
+
<!-- Checkmark -->
|
|
15
|
+
<g transform="translate(120, 120)">
|
|
16
|
+
<!-- Checkmark Circle Background -->
|
|
17
|
+
<circle cx="0" cy="0" r="35" fill="#10b981" opacity="0.95"/>
|
|
18
|
+
|
|
19
|
+
<!-- Checkmark -->
|
|
20
|
+
<path d="M -15 0 L -5 10 L 18 -15" stroke="#ffffff" stroke-width="5" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
|
21
|
+
</g>
|
|
22
|
+
|
|
23
|
+
<!-- Decorative Circles (Success indicators) -->
|
|
24
|
+
<circle cx="60" cy="160" r="4" fill="#10b981" opacity="0.7"/>
|
|
25
|
+
<circle cx="180" cy="160" r="4" fill="#10b981" opacity="0.7"/>
|
|
26
|
+
|
|
27
|
+
<!-- Text: AppClean -->
|
|
28
|
+
<text x="120" y="200" font-family="Arial, sans-serif" font-size="18" font-weight="bold" fill="#ffffff" text-anchor="middle" letter-spacing="1">
|
|
29
|
+
AppClean
|
|
30
|
+
</text>
|
|
31
|
+
|
|
32
|
+
<!-- Glow Effect -->
|
|
33
|
+
<circle cx="120" cy="120" r="115" fill="none" stroke="#3b82f6" stroke-width="1" opacity="0.2" stroke-dasharray="5,5"/>
|
|
34
|
+
</svg>
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const child_process_1 = require("child_process");
|
|
5
|
-
const logger_1 = require("../utils/logger");
|
|
6
|
-
class AppUpdateChecker {
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { Logger } from '../utils/logger.js';
|
|
3
|
+
export class AppUpdateChecker {
|
|
7
4
|
async checkForUpdate(app) {
|
|
8
|
-
|
|
5
|
+
Logger.info(`Checking for updates: ${app.name}...`);
|
|
9
6
|
const info = {
|
|
10
7
|
appName: app.name,
|
|
11
8
|
currentVersion: app.version,
|
|
@@ -34,11 +31,11 @@ class AppUpdateChecker {
|
|
|
34
31
|
await this.checkYumUpdate(info);
|
|
35
32
|
break;
|
|
36
33
|
default:
|
|
37
|
-
|
|
34
|
+
Logger.warn(`No update checker available for ${app.installMethod}`);
|
|
38
35
|
}
|
|
39
36
|
}
|
|
40
37
|
catch (error) {
|
|
41
|
-
|
|
38
|
+
Logger.debug(`Update check failed for ${app.name}: ${error.message}`);
|
|
42
39
|
}
|
|
43
40
|
return info;
|
|
44
41
|
}
|
|
@@ -52,7 +49,7 @@ class AppUpdateChecker {
|
|
|
52
49
|
}
|
|
53
50
|
async checkNpmUpdate(info) {
|
|
54
51
|
try {
|
|
55
|
-
const output =
|
|
52
|
+
const output = execSync(`npm view ${info.appName} version 2>/dev/null`).toString().trim();
|
|
56
53
|
if (output) {
|
|
57
54
|
info.latestVersion = output;
|
|
58
55
|
info.hasUpdate = this.compareVersions(info.currentVersion, output) < 0;
|
|
@@ -64,7 +61,7 @@ class AppUpdateChecker {
|
|
|
64
61
|
}
|
|
65
62
|
async checkYarnUpdate(info) {
|
|
66
63
|
try {
|
|
67
|
-
const output =
|
|
64
|
+
const output = execSync(`yarn info ${info.appName} version 2>/dev/null`).toString().trim();
|
|
68
65
|
if (output) {
|
|
69
66
|
info.latestVersion = output;
|
|
70
67
|
info.hasUpdate = this.compareVersions(info.currentVersion, output) < 0;
|
|
@@ -76,7 +73,7 @@ class AppUpdateChecker {
|
|
|
76
73
|
}
|
|
77
74
|
async checkPnpmUpdate(info) {
|
|
78
75
|
try {
|
|
79
|
-
const output =
|
|
76
|
+
const output = execSync(`pnpm view ${info.appName} version 2>/dev/null`).toString().trim();
|
|
80
77
|
if (output) {
|
|
81
78
|
info.latestVersion = output;
|
|
82
79
|
info.hasUpdate = this.compareVersions(info.currentVersion, output) < 0;
|
|
@@ -88,7 +85,7 @@ class AppUpdateChecker {
|
|
|
88
85
|
}
|
|
89
86
|
async checkBrewUpdate(info) {
|
|
90
87
|
try {
|
|
91
|
-
const output =
|
|
88
|
+
const output = execSync(`brew info ${info.appName} 2>/dev/null | grep "stable"`).toString();
|
|
92
89
|
const match = output.match(/(\d+\.\d+\.\d+)/);
|
|
93
90
|
if (match) {
|
|
94
91
|
info.latestVersion = match[1];
|
|
@@ -101,7 +98,7 @@ class AppUpdateChecker {
|
|
|
101
98
|
}
|
|
102
99
|
async checkAptUpdate(info) {
|
|
103
100
|
try {
|
|
104
|
-
const output =
|
|
101
|
+
const output = execSync(`apt-cache policy ${info.appName} 2>/dev/null`).toString();
|
|
105
102
|
const match = output.match(/Candidate: (\S+)/);
|
|
106
103
|
if (match) {
|
|
107
104
|
info.latestVersion = match[1];
|
|
@@ -114,7 +111,7 @@ class AppUpdateChecker {
|
|
|
114
111
|
}
|
|
115
112
|
async checkYumUpdate(info) {
|
|
116
113
|
try {
|
|
117
|
-
const output =
|
|
114
|
+
const output = execSync(`yum info ${info.appName} 2>/dev/null`).toString();
|
|
118
115
|
const match = output.match(/Version\s+:\s+(\S+)/);
|
|
119
116
|
if (match) {
|
|
120
117
|
info.latestVersion = match[1];
|
|
@@ -155,5 +152,4 @@ class AppUpdateChecker {
|
|
|
155
152
|
return summary;
|
|
156
153
|
}
|
|
157
154
|
}
|
|
158
|
-
exports.AppUpdateChecker = AppUpdateChecker;
|
|
159
155
|
//# sourceMappingURL=appUpdateChecker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appUpdateChecker.js","sourceRoot":"","sources":["../../src/core/appUpdateChecker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"appUpdateChecker.js","sourceRoot":"","sources":["../../src/core/appUpdateChecker.ts"],"names":[],"mappings":"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"}
|
package/dist/core/detector.js
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const platform_1 = require("../utils/platform");
|
|
9
|
-
const filesystem_1 = require("../utils/filesystem");
|
|
10
|
-
class Detector {
|
|
1
|
+
import { NpmManager } from '../managers/npmManager.js';
|
|
2
|
+
import { BrewManager } from '../managers/brewManager.js';
|
|
3
|
+
import { LinuxManager } from '../managers/linuxManager.js';
|
|
4
|
+
import { CustomManager } from '../managers/customManager.js';
|
|
5
|
+
import { isMacOS, isLinux } from '../utils/platform.js';
|
|
6
|
+
import { getFileSize } from '../utils/filesystem.js';
|
|
7
|
+
export class Detector {
|
|
11
8
|
constructor() {
|
|
12
|
-
this.npmManager = new
|
|
13
|
-
this.customManager = new
|
|
14
|
-
if (
|
|
15
|
-
this.brewManager = new
|
|
9
|
+
this.npmManager = new NpmManager();
|
|
10
|
+
this.customManager = new CustomManager();
|
|
11
|
+
if (isMacOS()) {
|
|
12
|
+
this.brewManager = new BrewManager();
|
|
16
13
|
}
|
|
17
|
-
if (
|
|
18
|
-
this.linuxManager = new
|
|
14
|
+
if (isLinux()) {
|
|
15
|
+
this.linuxManager = new LinuxManager();
|
|
19
16
|
}
|
|
20
17
|
}
|
|
21
18
|
async detectAllApps() {
|
|
@@ -86,7 +83,7 @@ class Detector {
|
|
|
86
83
|
break;
|
|
87
84
|
}
|
|
88
85
|
for (const artifact of artifacts) {
|
|
89
|
-
artifact.size =
|
|
86
|
+
artifact.size = getFileSize(artifact.path);
|
|
90
87
|
}
|
|
91
88
|
return artifacts;
|
|
92
89
|
}
|
|
@@ -95,5 +92,4 @@ class Detector {
|
|
|
95
92
|
return artifacts.reduce((total, artifact) => total + artifact.size, 0);
|
|
96
93
|
}
|
|
97
94
|
}
|
|
98
|
-
exports.Detector = Detector;
|
|
99
95
|
//# sourceMappingURL=detector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/core/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
exports.DuplicateFileFinder = void 0;
|
|
7
|
-
const fs_1 = __importDefault(require("fs"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
10
|
-
const logger_1 = require("../utils/logger");
|
|
11
|
-
class DuplicateFileFinder {
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import crypto from 'crypto';
|
|
4
|
+
import { Logger } from '../utils/logger.js';
|
|
5
|
+
export class DuplicateFileFinder {
|
|
12
6
|
async findDuplicates(directories) {
|
|
13
|
-
|
|
7
|
+
Logger.info('Scanning for duplicate files...');
|
|
14
8
|
const fileHashes = new Map();
|
|
15
9
|
for (const directory of directories) {
|
|
16
10
|
await this.scanDirectory(directory, fileHashes);
|
|
@@ -30,8 +24,8 @@ class DuplicateFileFinder {
|
|
|
30
24
|
}
|
|
31
25
|
async calculateHash(filePath) {
|
|
32
26
|
return new Promise((resolve, reject) => {
|
|
33
|
-
const hash =
|
|
34
|
-
const stream =
|
|
27
|
+
const hash = crypto.createHash('sha256');
|
|
28
|
+
const stream = fs.createReadStream(filePath);
|
|
35
29
|
stream.on('data', (data) => hash.update(data));
|
|
36
30
|
stream.on('end', () => resolve(hash.digest('hex')));
|
|
37
31
|
stream.on('error', reject);
|
|
@@ -39,10 +33,10 @@ class DuplicateFileFinder {
|
|
|
39
33
|
}
|
|
40
34
|
async scanDirectory(directory, fileHashes) {
|
|
41
35
|
try {
|
|
42
|
-
const entries =
|
|
36
|
+
const entries = fs.readdirSync(directory);
|
|
43
37
|
for (const entry of entries) {
|
|
44
|
-
const fullPath =
|
|
45
|
-
const stats =
|
|
38
|
+
const fullPath = path.join(directory, entry);
|
|
39
|
+
const stats = fs.statSync(fullPath);
|
|
46
40
|
if (stats.isDirectory()) {
|
|
47
41
|
await this.scanDirectory(fullPath, fileHashes);
|
|
48
42
|
}
|
|
@@ -56,7 +50,7 @@ class DuplicateFileFinder {
|
|
|
56
50
|
}
|
|
57
51
|
}
|
|
58
52
|
catch (error) {
|
|
59
|
-
|
|
53
|
+
Logger.debug(`Error scanning directory ${directory}: ${error.message}`);
|
|
60
54
|
}
|
|
61
55
|
}
|
|
62
56
|
getSummary(duplicates) {
|
|
@@ -76,5 +70,4 @@ Potential space savings: ${this.formatBytes(totalSize)}
|
|
|
76
70
|
return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];
|
|
77
71
|
}
|
|
78
72
|
}
|
|
79
|
-
exports.DuplicateFileFinder = DuplicateFileFinder;
|
|
80
73
|
//# sourceMappingURL=duplicateFileFinder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicateFileFinder.js","sourceRoot":"","sources":["../../src/core/duplicateFileFinder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"duplicateFileFinder.js","sourceRoot":"","sources":["../../src/core/duplicateFileFinder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const child_process_1 = require("child_process");
|
|
8
|
-
const platform_1 = require("../utils/platform");
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const fs_1 = __importDefault(require("fs"));
|
|
11
|
-
const logger_1 = require("../utils/logger");
|
|
12
|
-
class OrphanedDependencyDetector {
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { getHomeDir } from '../utils/platform.js';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import { Logger } from '../utils/logger.js';
|
|
6
|
+
export class OrphanedDependencyDetector {
|
|
13
7
|
async detectOrphanedPackages() {
|
|
14
|
-
|
|
8
|
+
Logger.info('Scanning for orphaned dependencies...');
|
|
15
9
|
try {
|
|
16
10
|
const globalPackages = this.getGlobalPackages();
|
|
17
11
|
const projectPackages = this.getProjectPackages();
|
|
@@ -36,20 +30,20 @@ class OrphanedDependencyDetector {
|
|
|
36
30
|
return orphaned.filter((p) => p.isOrphaned);
|
|
37
31
|
}
|
|
38
32
|
catch (error) {
|
|
39
|
-
|
|
33
|
+
Logger.error(`Error detecting orphaned packages: ${error.message}`);
|
|
40
34
|
return [];
|
|
41
35
|
}
|
|
42
36
|
}
|
|
43
37
|
getGlobalPackages() {
|
|
44
38
|
try {
|
|
45
|
-
const output =
|
|
39
|
+
const output = execSync('npm list -g --json 2>/dev/null || echo "{}"').toString();
|
|
46
40
|
const data = JSON.parse(output);
|
|
47
41
|
const packages = [];
|
|
48
42
|
if (data.dependencies) {
|
|
49
43
|
for (const [name, pkg] of Object.entries(data.dependencies)) {
|
|
50
44
|
const location = this.findPackageLocation(name);
|
|
51
45
|
if (location) {
|
|
52
|
-
const stats =
|
|
46
|
+
const stats = fs.statSync(location);
|
|
53
47
|
packages.push({
|
|
54
48
|
name,
|
|
55
49
|
version: pkg.version || 'unknown',
|
|
@@ -71,7 +65,7 @@ class OrphanedDependencyDetector {
|
|
|
71
65
|
getProjectPackages() {
|
|
72
66
|
const packages = new Set();
|
|
73
67
|
try {
|
|
74
|
-
const home =
|
|
68
|
+
const home = getHomeDir();
|
|
75
69
|
const searchPaths = [home, '/usr/local'];
|
|
76
70
|
for (const searchPath of searchPaths) {
|
|
77
71
|
this.findPackageJsonFiles(searchPath, packages);
|
|
@@ -85,11 +79,11 @@ class OrphanedDependencyDetector {
|
|
|
85
79
|
if (depth > 3)
|
|
86
80
|
return;
|
|
87
81
|
try {
|
|
88
|
-
const entries =
|
|
82
|
+
const entries = fs.readdirSync(dir);
|
|
89
83
|
for (const entry of entries) {
|
|
90
84
|
if (entry === 'package.json') {
|
|
91
85
|
try {
|
|
92
|
-
const content =
|
|
86
|
+
const content = fs.readFileSync(path.join(dir, entry), 'utf-8');
|
|
93
87
|
const json = JSON.parse(content);
|
|
94
88
|
if (json.dependencies) {
|
|
95
89
|
Object.keys(json.dependencies).forEach((dep) => packages.add(dep));
|
|
@@ -101,8 +95,8 @@ class OrphanedDependencyDetector {
|
|
|
101
95
|
catch {
|
|
102
96
|
}
|
|
103
97
|
}
|
|
104
|
-
const fullPath =
|
|
105
|
-
if (
|
|
98
|
+
const fullPath = path.join(dir, entry);
|
|
99
|
+
if (fs.statSync(fullPath).isDirectory() && !entry.startsWith('.')) {
|
|
106
100
|
this.findPackageJsonFiles(fullPath, packages, depth + 1);
|
|
107
101
|
}
|
|
108
102
|
}
|
|
@@ -115,7 +109,7 @@ class OrphanedDependencyDetector {
|
|
|
115
109
|
}
|
|
116
110
|
findPackageLocation(packageName) {
|
|
117
111
|
try {
|
|
118
|
-
const result =
|
|
112
|
+
const result = execSync(`npm list -g ${packageName} --json 2>/dev/null || echo "{}"`).toString();
|
|
119
113
|
const data = JSON.parse(result);
|
|
120
114
|
return data.dependencies?.[packageName]?.resolved || null;
|
|
121
115
|
}
|
|
@@ -126,10 +120,10 @@ class OrphanedDependencyDetector {
|
|
|
126
120
|
getDirectorySize(dir) {
|
|
127
121
|
try {
|
|
128
122
|
let size = 0;
|
|
129
|
-
const entries =
|
|
123
|
+
const entries = fs.readdirSync(dir);
|
|
130
124
|
for (const entry of entries) {
|
|
131
|
-
const fullPath =
|
|
132
|
-
const stats =
|
|
125
|
+
const fullPath = path.join(dir, entry);
|
|
126
|
+
const stats = fs.statSync(fullPath);
|
|
133
127
|
if (stats.isDirectory()) {
|
|
134
128
|
size += this.getDirectorySize(fullPath);
|
|
135
129
|
}
|
|
@@ -144,5 +138,4 @@ class OrphanedDependencyDetector {
|
|
|
144
138
|
}
|
|
145
139
|
}
|
|
146
140
|
}
|
|
147
|
-
exports.OrphanedDependencyDetector = OrphanedDependencyDetector;
|
|
148
141
|
//# sourceMappingURL=orphanedDependencyDetector.js.map
|
|
@@ -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":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAY5C,MAAM,OAAO,0BAA0B;IAIrC,KAAK,CAAC,sBAAsB;QAC1B,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAChD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAElD,MAAM,QAAQ,GAAsB,EAAE,CAAC;YAEvC,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;gBACjC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBAErE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5B,QAAQ,CAAC,IAAI,CAAC;wBACZ,GAAG,GAAG;wBACN,UAAU,EAAE,IAAI;wBAChB,UAAU,EAAE,EAAE;qBACf,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC;wBACZ,GAAG,GAAG;wBACN,UAAU,EAAE,KAAK;wBACjB,UAAU;qBACX,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,sCAAuC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/E,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAKO,iBAAiB;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,6CAA6C,CAAC,CAAC,QAAQ,EAAE,CAAC;YAClF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEhC,MAAM,QAAQ,GAAsB,EAAE,CAAC;YAEvC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;oBAChD,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBACpC,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI;4BACJ,OAAO,EAAG,GAAW,CAAC,OAAO,IAAI,SAAS;4BAC1C,QAAQ;4BACR,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;4BACrC,YAAY,EAAE,KAAK,CAAC,KAAK;4BACzB,UAAU,EAAE,KAAK;4BACjB,UAAU,EAAE,EAAE;yBACf,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAKO,kBAAkB;QACxB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAEzC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAKO,oBAAoB,CAAC,GAAW,EAAE,QAAqB,EAAE,QAAgB,CAAC;QAChF,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO;QAEtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAEpC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;oBAC7B,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;wBAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAEjC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;4BACtB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBACrE,CAAC;wBACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;4BACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBACxE,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;oBAET,CAAC;gBACH,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACvC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAKO,iBAAiB,CAAC,WAAmB,EAAE,eAA4B;QACzE,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;IACtE,CAAC;IAKO,mBAAmB,CAAC,WAAmB;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,WAAW,kCAAkC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjG,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAKO,gBAAgB,CAAC,GAAW;QAClC,IAAI,CAAC;YACH,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAEpC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACvC,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAEpC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;gBACrB,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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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"}
|