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,30 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const child_process_1 = require("child_process");
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const platform_1 = require("../utils/platform");
|
|
10
|
-
const filesystem_1 = require("../utils/filesystem");
|
|
11
|
-
const logger_1 = require("../utils/logger");
|
|
12
|
-
class NpmManager {
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { getHomeDir } from '../utils/platform.js';
|
|
4
|
+
import { pathExists } from '../utils/filesystem.js';
|
|
5
|
+
import { Logger } from '../utils/logger.js';
|
|
6
|
+
export class NpmManager {
|
|
13
7
|
constructor() {
|
|
14
8
|
this.globalNpmPath = this.getNpmGlobalPath();
|
|
15
9
|
}
|
|
16
10
|
getNpmGlobalPath() {
|
|
17
11
|
try {
|
|
18
|
-
return
|
|
12
|
+
return execSync('npm config get prefix').toString().trim();
|
|
19
13
|
}
|
|
20
14
|
catch {
|
|
21
|
-
return
|
|
15
|
+
return path.join(getHomeDir(), '.npm-global');
|
|
22
16
|
}
|
|
23
17
|
}
|
|
24
18
|
async getInstalledPackages() {
|
|
25
19
|
const packages = [];
|
|
26
20
|
try {
|
|
27
|
-
const output =
|
|
21
|
+
const output = execSync('npm list -g --json --depth=0').toString();
|
|
28
22
|
const data = JSON.parse(output);
|
|
29
23
|
const dependencies = data.dependencies || {};
|
|
30
24
|
for (const [name, pkg] of Object.entries(dependencies)) {
|
|
@@ -33,21 +27,21 @@ class NpmManager {
|
|
|
33
27
|
name,
|
|
34
28
|
version: typedPkg.version || 'unknown',
|
|
35
29
|
installMethod: 'npm',
|
|
36
|
-
mainPath:
|
|
30
|
+
mainPath: path.join(this.globalNpmPath, 'lib', 'node_modules', name),
|
|
37
31
|
installedDate: undefined,
|
|
38
32
|
});
|
|
39
33
|
}
|
|
40
34
|
}
|
|
41
35
|
catch (error) {
|
|
42
|
-
|
|
36
|
+
Logger.debug('Failed to get npm packages: ' + error.message);
|
|
43
37
|
}
|
|
44
38
|
return packages;
|
|
45
39
|
}
|
|
46
40
|
async findArtifacts(appName) {
|
|
47
41
|
const artifacts = [];
|
|
48
|
-
const home =
|
|
49
|
-
const packagePath =
|
|
50
|
-
if (
|
|
42
|
+
const home = getHomeDir();
|
|
43
|
+
const packagePath = path.join(this.globalNpmPath, 'lib', 'node_modules', appName);
|
|
44
|
+
if (pathExists(packagePath)) {
|
|
51
45
|
artifacts.push({
|
|
52
46
|
path: packagePath,
|
|
53
47
|
type: 'other',
|
|
@@ -55,8 +49,8 @@ class NpmManager {
|
|
|
55
49
|
description: 'Package directory',
|
|
56
50
|
});
|
|
57
51
|
}
|
|
58
|
-
const binPath =
|
|
59
|
-
if (
|
|
52
|
+
const binPath = path.join(this.globalNpmPath, 'bin', appName);
|
|
53
|
+
if (pathExists(binPath)) {
|
|
60
54
|
artifacts.push({
|
|
61
55
|
path: binPath,
|
|
62
56
|
type: 'binary',
|
|
@@ -65,12 +59,12 @@ class NpmManager {
|
|
|
65
59
|
});
|
|
66
60
|
}
|
|
67
61
|
const configPaths = [
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
62
|
+
path.join(home, `.${appName}rc`),
|
|
63
|
+
path.join(home, `.${appName}rc.json`),
|
|
64
|
+
path.join(home, `.config`, appName),
|
|
71
65
|
];
|
|
72
66
|
for (const configPath of configPaths) {
|
|
73
|
-
if (
|
|
67
|
+
if (pathExists(configPath)) {
|
|
74
68
|
artifacts.push({
|
|
75
69
|
path: configPath,
|
|
76
70
|
type: 'config',
|
|
@@ -80,11 +74,11 @@ class NpmManager {
|
|
|
80
74
|
}
|
|
81
75
|
}
|
|
82
76
|
const cachePaths = [
|
|
83
|
-
|
|
84
|
-
|
|
77
|
+
path.join(home, `.cache`, appName),
|
|
78
|
+
path.join(home, `Library`, `Caches`, appName),
|
|
85
79
|
];
|
|
86
80
|
for (const cachePath of cachePaths) {
|
|
87
|
-
if (
|
|
81
|
+
if (pathExists(cachePath)) {
|
|
88
82
|
artifacts.push({
|
|
89
83
|
path: cachePath,
|
|
90
84
|
type: 'cache',
|
|
@@ -93,8 +87,8 @@ class NpmManager {
|
|
|
93
87
|
});
|
|
94
88
|
}
|
|
95
89
|
}
|
|
96
|
-
const dataPath =
|
|
97
|
-
if (
|
|
90
|
+
const dataPath = path.join(home, `.local`, `share`, appName);
|
|
91
|
+
if (pathExists(dataPath)) {
|
|
98
92
|
artifacts.push({
|
|
99
93
|
path: dataPath,
|
|
100
94
|
type: 'data',
|
|
@@ -106,14 +100,13 @@ class NpmManager {
|
|
|
106
100
|
}
|
|
107
101
|
async removePackage(appName) {
|
|
108
102
|
try {
|
|
109
|
-
|
|
103
|
+
execSync(`npm uninstall -g ${appName}`);
|
|
110
104
|
return true;
|
|
111
105
|
}
|
|
112
106
|
catch (error) {
|
|
113
|
-
|
|
107
|
+
Logger.debug('Failed to uninstall npm package: ' + error.message);
|
|
114
108
|
return false;
|
|
115
109
|
}
|
|
116
110
|
}
|
|
117
111
|
}
|
|
118
|
-
exports.NpmManager = NpmManager;
|
|
119
112
|
//# sourceMappingURL=npmManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npmManager.js","sourceRoot":"","sources":["../../src/managers/npmManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"npmManager.js","sourceRoot":"","sources":["../../src/managers/npmManager.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface ApiResponse<T> {
|
|
2
|
+
success: boolean;
|
|
3
|
+
data?: T;
|
|
4
|
+
error?: string;
|
|
5
|
+
message?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class ApiClient {
|
|
8
|
+
private baseUrl;
|
|
9
|
+
private timeout;
|
|
10
|
+
get<T = any>(endpoint: string, options?: RequestInit): Promise<T>;
|
|
11
|
+
post<T = any>(endpoint: string, body?: any, options?: RequestInit): Promise<T>;
|
|
12
|
+
put<T = any>(endpoint: string, body?: any, options?: RequestInit): Promise<T>;
|
|
13
|
+
delete<T = any>(endpoint: string, options?: RequestInit): Promise<T>;
|
|
14
|
+
private request;
|
|
15
|
+
private parseResponse;
|
|
16
|
+
private parseErrorResponse;
|
|
17
|
+
}
|
|
18
|
+
export declare class ApiError extends Error {
|
|
19
|
+
status: number;
|
|
20
|
+
data?: any | undefined;
|
|
21
|
+
constructor(message: string, status: number, data?: any | undefined);
|
|
22
|
+
}
|
|
23
|
+
export declare const apiClient: ApiClient;
|
|
24
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/api/client.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAAS;IAKlB,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAOjE,IAAI,CAAC,CAAC,GAAG,GAAG,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC;IAeP,GAAG,CAAC,CAAC,GAAG,GAAG,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC;IAeP,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;YAO5D,OAAO;YA+CP,aAAa;YAsBb,kBAAkB;CAWjC;AAKD,qBAAa,QAAS,SAAQ,KAAK;IAGxB,MAAM,EAAE,MAAM;IACd,IAAI,CAAC,EAAE,GAAG;gBAFjB,OAAO,EAAE,MAAM,EACR,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,GAAG,YAAA;CAKpB;AAGD,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
export class ApiClient {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.baseUrl = '';
|
|
4
|
+
this.timeout = 30000;
|
|
5
|
+
}
|
|
6
|
+
async get(endpoint, options) {
|
|
7
|
+
return this.request(endpoint, { ...options, method: 'GET' });
|
|
8
|
+
}
|
|
9
|
+
async post(endpoint, body, options) {
|
|
10
|
+
return this.request(endpoint, {
|
|
11
|
+
...options,
|
|
12
|
+
method: 'POST',
|
|
13
|
+
headers: {
|
|
14
|
+
'Content-Type': 'application/json',
|
|
15
|
+
...options?.headers,
|
|
16
|
+
},
|
|
17
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async put(endpoint, body, options) {
|
|
21
|
+
return this.request(endpoint, {
|
|
22
|
+
...options,
|
|
23
|
+
method: 'PUT',
|
|
24
|
+
headers: {
|
|
25
|
+
'Content-Type': 'application/json',
|
|
26
|
+
...options?.headers,
|
|
27
|
+
},
|
|
28
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async delete(endpoint, options) {
|
|
32
|
+
return this.request(endpoint, { ...options, method: 'DELETE' });
|
|
33
|
+
}
|
|
34
|
+
async request(endpoint, options = {}) {
|
|
35
|
+
const url = `${this.baseUrl}${endpoint}`;
|
|
36
|
+
const controller = new AbortController();
|
|
37
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
38
|
+
try {
|
|
39
|
+
const response = await fetch(url, {
|
|
40
|
+
...options,
|
|
41
|
+
signal: controller.signal,
|
|
42
|
+
});
|
|
43
|
+
clearTimeout(timeoutId);
|
|
44
|
+
if (!response.ok) {
|
|
45
|
+
const errorData = await this.parseErrorResponse(response);
|
|
46
|
+
throw new ApiError(errorData.message || `HTTP ${response.status}`, response.status, errorData);
|
|
47
|
+
}
|
|
48
|
+
return await this.parseResponse(response);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
clearTimeout(timeoutId);
|
|
52
|
+
if (error instanceof ApiError) {
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
if (error instanceof Error) {
|
|
56
|
+
if (error.name === 'AbortError') {
|
|
57
|
+
throw new ApiError('Request timeout', 408);
|
|
58
|
+
}
|
|
59
|
+
throw new ApiError(error.message, 0);
|
|
60
|
+
}
|
|
61
|
+
throw new ApiError('Unknown error occurred', 0);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async parseResponse(response) {
|
|
65
|
+
const contentType = response.headers.get('content-type');
|
|
66
|
+
if (contentType?.includes('application/json')) {
|
|
67
|
+
const json = await response.json();
|
|
68
|
+
if (json && typeof json === 'object' && 'data' in json && 'success' in json) {
|
|
69
|
+
return json.data;
|
|
70
|
+
}
|
|
71
|
+
return json;
|
|
72
|
+
}
|
|
73
|
+
if (contentType?.includes('text/')) {
|
|
74
|
+
return (await response.text());
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
async parseErrorResponse(response) {
|
|
79
|
+
try {
|
|
80
|
+
const contentType = response.headers.get('content-type');
|
|
81
|
+
if (contentType?.includes('application/json')) {
|
|
82
|
+
return await response.json();
|
|
83
|
+
}
|
|
84
|
+
return { message: response.statusText };
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return { message: 'Unknown error' };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export class ApiError extends Error {
|
|
92
|
+
constructor(message, status, data) {
|
|
93
|
+
super(message);
|
|
94
|
+
this.status = status;
|
|
95
|
+
this.data = data;
|
|
96
|
+
this.name = 'ApiError';
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export const apiClient = new ApiClient();
|
|
100
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/ui/client/api/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { router } from './utils/router.js';
|
|
2
|
+
import { appStore } from './state/appStore.js';
|
|
3
|
+
import { dashboardStore } from './state/dashboardStore.js';
|
|
4
|
+
import { uiStore } from './state/uiStore.js';
|
|
5
|
+
export declare function initApp(): Promise<void>;
|
|
6
|
+
export { appStore, dashboardStore, uiStore, router };
|
|
7
|
+
//# sourceMappingURL=app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/ui/client/app.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAW7C,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB7C;AAkFD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { router } from './utils/router.js';
|
|
2
|
+
import { appStore } from './state/appStore.js';
|
|
3
|
+
import { dashboardStore } from './state/dashboardStore.js';
|
|
4
|
+
import { uiStore } from './state/uiStore.js';
|
|
5
|
+
import { renderDashboard } from './pages/dashboard.js';
|
|
6
|
+
import { renderAppSearch } from './pages/appSearch.js';
|
|
7
|
+
import { renderAppDetails } from './pages/appDetails.js';
|
|
8
|
+
import { renderSettings } from './pages/settings.js';
|
|
9
|
+
export async function initApp() {
|
|
10
|
+
console.log('๐งน AppClean GUI v1.0.0 initializing...');
|
|
11
|
+
registerRoutes();
|
|
12
|
+
setupUIListeners();
|
|
13
|
+
await initializeStores();
|
|
14
|
+
router.navigate('');
|
|
15
|
+
console.log('โ AppClean GUI ready');
|
|
16
|
+
}
|
|
17
|
+
function registerRoutes() {
|
|
18
|
+
router.register('', () => {
|
|
19
|
+
uiStore.navigateTo('dashboard');
|
|
20
|
+
renderDashboard();
|
|
21
|
+
}, 'AppClean - Dashboard');
|
|
22
|
+
router.register('apps', () => {
|
|
23
|
+
uiStore.navigateTo('apps');
|
|
24
|
+
renderAppSearch();
|
|
25
|
+
}, 'AppClean - Apps');
|
|
26
|
+
router.register('apps/:appName', (params) => {
|
|
27
|
+
uiStore.navigateTo('app-details');
|
|
28
|
+
renderAppDetails(params.appName);
|
|
29
|
+
}, 'AppClean - App Details');
|
|
30
|
+
router.register('settings', () => {
|
|
31
|
+
uiStore.navigateTo('settings');
|
|
32
|
+
renderSettings();
|
|
33
|
+
}, 'AppClean - Settings');
|
|
34
|
+
}
|
|
35
|
+
async function initializeStores() {
|
|
36
|
+
try {
|
|
37
|
+
await dashboardStore.loadStats();
|
|
38
|
+
appStore.loadApps().catch((error) => {
|
|
39
|
+
console.error('Failed to load apps:', error);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.error('Failed to initialize stores:', error);
|
|
44
|
+
uiStore.showError('Failed to load application data');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function setupUIListeners() {
|
|
48
|
+
uiStore.subscribe((state) => {
|
|
49
|
+
console.log('UI State changed:', state.currentView);
|
|
50
|
+
});
|
|
51
|
+
appStore.subscribe((state) => {
|
|
52
|
+
if (state && state.apps) {
|
|
53
|
+
console.log(`Apps loaded: ${state.apps.length}`);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
dashboardStore.subscribe((state) => {
|
|
57
|
+
if (state.stats) {
|
|
58
|
+
console.log(`Dashboard stats: ${state.stats.totalApps} apps, ${state.stats.totalSpaceUsed} bytes`);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
router.onchange((route) => {
|
|
62
|
+
console.log('Navigated to:', route.path);
|
|
63
|
+
});
|
|
64
|
+
document.addEventListener('theme-toggle', () => {
|
|
65
|
+
uiStore.toggleTheme();
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
export { appStore, dashboardStore, uiStore, router };
|
|
69
|
+
if (document.readyState === 'loading') {
|
|
70
|
+
document.addEventListener('DOMContentLoaded', () => initApp().catch(e => console.error('Init error:', e)));
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
initApp().catch(e => console.error('Init error:', e));
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/ui/client/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<meta name="description" content="AppClean - Intelligently remove applications and all their hidden files">
|
|
7
|
+
<meta name="theme-color" content="#3b82f6">
|
|
8
|
+
<title>AppClean - Application Remover</title>
|
|
9
|
+
|
|
10
|
+
<!-- Styles -->
|
|
11
|
+
<link rel="stylesheet" href="/static/styles/variables.css">
|
|
12
|
+
<link rel="stylesheet" href="/static/styles/base.css">
|
|
13
|
+
<link rel="stylesheet" href="/static/styles/layout.css">
|
|
14
|
+
<link rel="stylesheet" href="/static/styles/components.css">
|
|
15
|
+
<link rel="stylesheet" href="/static/styles/animations.css">
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<!-- Root container for SPA -->
|
|
19
|
+
<div id="app" class="app-root">
|
|
20
|
+
<!-- Navbar -->
|
|
21
|
+
<nav class="navbar" id="navbar">
|
|
22
|
+
<div class="container-xl">
|
|
23
|
+
<div class="flex-between">
|
|
24
|
+
<div class="flex items-center gap-4">
|
|
25
|
+
<h1 class="navbar-brand" id="navbar-brand">๐งน AppClean</h1>
|
|
26
|
+
<button class="btn btn-ghost navbar-menu-toggle" id="navbar-menu-toggle" aria-label="Toggle navigation">
|
|
27
|
+
<span class="hamburger">โฐ</span>
|
|
28
|
+
</button>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="flex items-center gap-2">
|
|
31
|
+
<button class="btn btn-ghost btn-sm" id="theme-toggle" aria-label="Toggle dark mode">
|
|
32
|
+
<span class="theme-icon">๐</span>
|
|
33
|
+
</button>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</nav>
|
|
38
|
+
|
|
39
|
+
<!-- Main layout -->
|
|
40
|
+
<div class="app-layout flex">
|
|
41
|
+
<!-- Sidebar -->
|
|
42
|
+
<aside class="sidebar" id="sidebar">
|
|
43
|
+
<div class="sidebar-nav">
|
|
44
|
+
<nav class="nav-links">
|
|
45
|
+
<a href="#/" class="nav-link active" data-view="dashboard">
|
|
46
|
+
<span class="nav-icon">๐</span>
|
|
47
|
+
<span class="nav-label">Dashboard</span>
|
|
48
|
+
</a>
|
|
49
|
+
<a href="#/apps" class="nav-link" data-view="apps">
|
|
50
|
+
<span class="nav-icon">๐ฆ</span>
|
|
51
|
+
<span class="nav-label">Apps</span>
|
|
52
|
+
</a>
|
|
53
|
+
<a href="#/settings" class="nav-link" data-view="settings">
|
|
54
|
+
<span class="nav-icon">โ๏ธ</span>
|
|
55
|
+
<span class="nav-label">Settings</span>
|
|
56
|
+
</a>
|
|
57
|
+
</nav>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="sidebar-footer">
|
|
60
|
+
<a href="https://github.com/praveenkay/AppClean" target="_blank" rel="noopener" class="sidebar-link">
|
|
61
|
+
<span class="nav-icon">๐ฌ</span>
|
|
62
|
+
<span class="nav-label">GitHub</span>
|
|
63
|
+
</a>
|
|
64
|
+
</div>
|
|
65
|
+
</aside>
|
|
66
|
+
|
|
67
|
+
<!-- Main content -->
|
|
68
|
+
<main class="main-content" id="main-content">
|
|
69
|
+
<div class="container-xl">
|
|
70
|
+
<!-- Pages will be rendered here -->
|
|
71
|
+
<div id="page-container" class="page-container">
|
|
72
|
+
<!-- Loading skeleton -->
|
|
73
|
+
<div class="loading-state" id="loading-state">
|
|
74
|
+
<div class="spinner-lg spinner"></div>
|
|
75
|
+
<p class="text-center text-muted mt-4">Loading AppClean...</p>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</main>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<!-- Modals -->
|
|
83
|
+
<div class="modal-backdrop" id="modal-backdrop">
|
|
84
|
+
<div class="modal" id="modal" role="dialog" aria-labelledby="modal-title">
|
|
85
|
+
<div class="modal-header">
|
|
86
|
+
<h2 class="modal-title" id="modal-title">Dialog</h2>
|
|
87
|
+
<button class="modal-close" id="modal-close" aria-label="Close dialog">×</button>
|
|
88
|
+
</div>
|
|
89
|
+
<div class="modal-body" id="modal-body">
|
|
90
|
+
<!-- Content will be rendered here -->
|
|
91
|
+
</div>
|
|
92
|
+
<div class="modal-footer" id="modal-footer">
|
|
93
|
+
<!-- Buttons will be rendered here -->
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
<!-- Notifications -->
|
|
99
|
+
<div class="notifications-container" id="notifications-container" role="region" aria-label="Notifications" aria-live="polite">
|
|
100
|
+
<!-- Notifications will be rendered here -->
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<!-- Scripts -->
|
|
105
|
+
<script type="module" src="/static/app.js"></script>
|
|
106
|
+
</body>
|
|
107
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appDetails.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/pages/appDetails.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAKD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBrE"}
|