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.
Files changed (211) hide show
  1. package/GUI_IMPLEMENTATION_STATUS.md +143 -0
  2. package/MD_Files/INDEX.md +51 -0
  3. package/MD_Files/PUBLICATION_SUCCESS_REPORT.md +227 -0
  4. package/PHASE2_COMPLETION.md +281 -0
  5. package/PHASE3_COMPLETION.md +364 -0
  6. package/README.md +446 -376
  7. package/assets/logo.svg +34 -0
  8. package/dist/core/appUpdateChecker.js +12 -16
  9. package/dist/core/appUpdateChecker.js.map +1 -1
  10. package/dist/core/detector.js +14 -18
  11. package/dist/core/detector.js.map +1 -1
  12. package/dist/core/duplicateFileFinder.js +12 -19
  13. package/dist/core/duplicateFileFinder.js.map +1 -1
  14. package/dist/core/orphanedDependencyDetector.js +19 -26
  15. package/dist/core/orphanedDependencyDetector.js.map +1 -1
  16. package/dist/core/performanceOptimizer.js +6 -10
  17. package/dist/core/performanceOptimizer.js.map +1 -1
  18. package/dist/core/permissionHandler.js +21 -25
  19. package/dist/core/permissionHandler.js.map +1 -1
  20. package/dist/core/pluginSystem.js +9 -13
  21. package/dist/core/pluginSystem.js.map +1 -1
  22. package/dist/core/removalRecorder.js +12 -19
  23. package/dist/core/removalRecorder.js.map +1 -1
  24. package/dist/core/remover.js +59 -66
  25. package/dist/core/remover.js.map +1 -1
  26. package/dist/core/reportGenerator.d.ts +1 -1
  27. package/dist/core/reportGenerator.d.ts.map +1 -1
  28. package/dist/core/reportGenerator.js +27 -34
  29. package/dist/core/reportGenerator.js.map +1 -1
  30. package/dist/core/scheduledCleanup.js +23 -30
  31. package/dist/core/scheduledCleanup.js.map +1 -1
  32. package/dist/core/serviceFileDetector.js +24 -31
  33. package/dist/core/serviceFileDetector.js.map +1 -1
  34. package/dist/core/verificationModule.js +10 -14
  35. package/dist/core/verificationModule.js.map +1 -1
  36. package/dist/index.js +190 -90
  37. package/dist/index.js.map +1 -1
  38. package/dist/managers/brewManager.d.ts.map +1 -1
  39. package/dist/managers/brewManager.js +35 -41
  40. package/dist/managers/brewManager.js.map +1 -1
  41. package/dist/managers/customManager.d.ts +2 -1
  42. package/dist/managers/customManager.d.ts.map +1 -1
  43. package/dist/managers/customManager.js +79 -53
  44. package/dist/managers/customManager.js.map +1 -1
  45. package/dist/managers/linuxManager.js +29 -36
  46. package/dist/managers/linuxManager.js.map +1 -1
  47. package/dist/managers/npmManager.js +27 -34
  48. package/dist/managers/npmManager.js.map +1 -1
  49. package/dist/types/index.js +1 -2
  50. package/dist/ui/client/api/client.d.ts +24 -0
  51. package/dist/ui/client/api/client.d.ts.map +1 -0
  52. package/dist/ui/client/api/client.js +96 -0
  53. package/dist/ui/client/api/client.js.map +1 -0
  54. package/dist/ui/client/app.d.ts +7 -0
  55. package/dist/ui/client/app.d.ts.map +1 -0
  56. package/dist/ui/client/app.js +71 -0
  57. package/dist/ui/client/app.js.map +1 -0
  58. package/dist/ui/client/index.html +107 -0
  59. package/dist/ui/client/pages/appDetails.d.ts +8 -0
  60. package/dist/ui/client/pages/appDetails.d.ts.map +1 -0
  61. package/dist/ui/client/pages/appDetails.js +287 -0
  62. package/dist/ui/client/pages/appDetails.js.map +1 -0
  63. package/dist/ui/client/pages/appSearch.d.ts +2 -0
  64. package/dist/ui/client/pages/appSearch.d.ts.map +1 -0
  65. package/dist/ui/client/pages/appSearch.js +210 -0
  66. package/dist/ui/client/pages/appSearch.js.map +1 -0
  67. package/dist/ui/client/pages/dashboard.d.ts +2 -0
  68. package/dist/ui/client/pages/dashboard.d.ts.map +1 -0
  69. package/dist/ui/client/pages/dashboard.js +154 -0
  70. package/dist/ui/client/pages/dashboard.js.map +1 -0
  71. package/dist/ui/client/pages/settings.d.ts +7 -0
  72. package/dist/ui/client/pages/settings.d.ts.map +1 -0
  73. package/dist/ui/client/pages/settings.js +279 -0
  74. package/dist/ui/client/pages/settings.js.map +1 -0
  75. package/dist/ui/client/state/appStore.d.ts +38 -0
  76. package/dist/ui/client/state/appStore.d.ts.map +1 -0
  77. package/dist/ui/client/state/appStore.js +121 -0
  78. package/dist/ui/client/state/appStore.js.map +1 -0
  79. package/dist/ui/client/state/dashboardStore.d.ts +31 -0
  80. package/dist/ui/client/state/dashboardStore.d.ts.map +1 -0
  81. package/dist/ui/client/state/dashboardStore.js +70 -0
  82. package/dist/ui/client/state/dashboardStore.js.map +1 -0
  83. package/dist/ui/client/state/uiStore.d.ts +43 -0
  84. package/dist/ui/client/state/uiStore.d.ts.map +1 -0
  85. package/dist/ui/client/state/uiStore.js +109 -0
  86. package/dist/ui/client/state/uiStore.js.map +1 -0
  87. package/dist/ui/client/styles/animations.css +327 -0
  88. package/dist/ui/client/styles/base.css +214 -0
  89. package/dist/ui/client/styles/components.css +400 -0
  90. package/dist/ui/client/styles/layout.css +224 -0
  91. package/dist/ui/client/styles/variables.css +140 -0
  92. package/dist/ui/client/utils/events.d.ts +19 -0
  93. package/dist/ui/client/utils/events.d.ts.map +1 -0
  94. package/dist/ui/client/utils/events.js +54 -0
  95. package/dist/ui/client/utils/events.js.map +1 -0
  96. package/dist/ui/client/utils/formatting.d.ts +11 -0
  97. package/dist/ui/client/utils/formatting.d.ts.map +1 -0
  98. package/dist/ui/client/utils/formatting.js +104 -0
  99. package/dist/ui/client/utils/formatting.js.map +1 -0
  100. package/dist/ui/client/utils/router.d.ts +25 -0
  101. package/dist/ui/client/utils/router.d.ts.map +1 -0
  102. package/dist/ui/client/utils/router.js +90 -0
  103. package/dist/ui/client/utils/router.js.map +1 -0
  104. package/dist/ui/guiServer.d.ts +8 -1
  105. package/dist/ui/guiServer.d.ts.map +1 -1
  106. package/dist/ui/guiServer.js +148 -110
  107. package/dist/ui/guiServer.js.map +1 -1
  108. package/dist/ui/menu.js +18 -27
  109. package/dist/ui/menu.js.map +1 -1
  110. package/dist/ui/prompts.js +34 -47
  111. package/dist/ui/prompts.js.map +1 -1
  112. package/dist/ui/server/middleware/errorHandler.d.ts +19 -0
  113. package/dist/ui/server/middleware/errorHandler.d.ts.map +1 -0
  114. package/dist/ui/server/middleware/errorHandler.js +100 -0
  115. package/dist/ui/server/middleware/errorHandler.js.map +1 -0
  116. package/dist/ui/server/routes/apps.d.ts +8 -0
  117. package/dist/ui/server/routes/apps.d.ts.map +1 -0
  118. package/dist/ui/server/routes/apps.js +74 -0
  119. package/dist/ui/server/routes/apps.js.map +1 -0
  120. package/dist/ui/server/routes/dashboard.d.ts +4 -0
  121. package/dist/ui/server/routes/dashboard.d.ts.map +1 -0
  122. package/dist/ui/server/routes/dashboard.js +57 -0
  123. package/dist/ui/server/routes/dashboard.js.map +1 -0
  124. package/dist/ui/server/routes/settings.d.ts +6 -0
  125. package/dist/ui/server/routes/settings.d.ts.map +1 -0
  126. package/dist/ui/server/routes/settings.js +31 -0
  127. package/dist/ui/server/routes/settings.js.map +1 -0
  128. package/dist/ui/server/services/appService.d.ts +45 -0
  129. package/dist/ui/server/services/appService.d.ts.map +1 -0
  130. package/dist/ui/server/services/appService.js +114 -0
  131. package/dist/ui/server/services/appService.js.map +1 -0
  132. package/dist/ui/server/services/removalService.d.ts +24 -0
  133. package/dist/ui/server/services/removalService.d.ts.map +1 -0
  134. package/dist/ui/server/services/removalService.js +83 -0
  135. package/dist/ui/server/services/removalService.js.map +1 -0
  136. package/dist/utils/filesystem.js +32 -49
  137. package/dist/utils/filesystem.js.map +1 -1
  138. package/dist/utils/logger.js +9 -18
  139. package/dist/utils/logger.js.map +1 -1
  140. package/dist/utils/platform.js +10 -22
  141. package/dist/utils/platform.js.map +1 -1
  142. package/dist/utils/upgrade.d.ts +22 -0
  143. package/dist/utils/upgrade.d.ts.map +1 -0
  144. package/dist/utils/upgrade.js +94 -0
  145. package/dist/utils/upgrade.js.map +1 -0
  146. package/package.json +4 -2
  147. package/src/core/appUpdateChecker.ts +1 -1
  148. package/src/core/detector.ts +6 -6
  149. package/src/core/duplicateFileFinder.ts +1 -1
  150. package/src/core/orphanedDependencyDetector.ts +2 -2
  151. package/src/core/performanceOptimizer.ts +1 -1
  152. package/src/core/permissionHandler.ts +2 -2
  153. package/src/core/pluginSystem.ts +1 -1
  154. package/src/core/removalRecorder.ts +2 -2
  155. package/src/core/remover.ts +11 -11
  156. package/src/core/reportGenerator.ts +2 -2
  157. package/src/core/scheduledCleanup.ts +2 -2
  158. package/src/core/serviceFileDetector.ts +2 -2
  159. package/src/core/verificationModule.ts +2 -2
  160. package/src/index.ts +133 -6
  161. package/src/managers/brewManager.ts +11 -9
  162. package/src/managers/customManager.ts +71 -30
  163. package/src/managers/linuxManager.ts +3 -3
  164. package/src/managers/npmManager.ts +3 -3
  165. package/src/ui/client/api/client.ts +163 -0
  166. package/src/ui/client/app.ts +121 -0
  167. package/src/ui/client/index.html +107 -0
  168. package/src/ui/client/pages/appDetails.ts +356 -0
  169. package/src/ui/client/pages/appSearch.ts +270 -0
  170. package/src/ui/client/pages/dashboard.ts +189 -0
  171. package/src/ui/client/pages/settings.ts +342 -0
  172. package/src/ui/client/state/appStore.ts +169 -0
  173. package/src/ui/client/state/dashboardStore.ts +113 -0
  174. package/src/ui/client/state/uiStore.ts +166 -0
  175. package/src/ui/client/styles/animations.css +327 -0
  176. package/src/ui/client/styles/base.css +214 -0
  177. package/src/ui/client/styles/components.css +400 -0
  178. package/src/ui/client/styles/layout.css +224 -0
  179. package/src/ui/client/styles/variables.css +140 -0
  180. package/src/ui/client/utils/events.ts +74 -0
  181. package/src/ui/client/utils/formatting.ts +157 -0
  182. package/src/ui/client/utils/router.ts +161 -0
  183. package/src/ui/guiServer.ts +206 -105
  184. package/src/ui/prompts.ts +1 -1
  185. package/src/ui/server/middleware/errorHandler.ts +174 -0
  186. package/src/ui/server/routes/apps.ts +132 -0
  187. package/src/ui/server/routes/dashboard.ts +93 -0
  188. package/src/ui/server/routes/settings.ts +63 -0
  189. package/src/ui/server/services/appService.ts +184 -0
  190. package/src/ui/server/services/removalService.ts +138 -0
  191. package/src/utils/upgrade.ts +143 -0
  192. package/tsconfig.json +3 -2
  193. package/INDEX.md +0 -165
  194. /package/{ACTION_CHECKLIST.md → MD_Files/ACTION_CHECKLIST.md} +0 -0
  195. /package/{APPCLEAN_SUMMARY.md → MD_Files/APPCLEAN_SUMMARY.md} +0 -0
  196. /package/{CHANGELOG.md → MD_Files/CHANGELOG.md} +0 -0
  197. /package/{CODE_OF_CONDUCT.md → MD_Files/CODE_OF_CONDUCT.md} +0 -0
  198. /package/{CODE_REVIEW_REPORT.md → MD_Files/CODE_REVIEW_REPORT.md} +0 -0
  199. /package/{COMMUNITY_POSTS.md → MD_Files/COMMUNITY_POSTS.md} +0 -0
  200. /package/{DEPLOYMENT_GUIDE.md → MD_Files/DEPLOYMENT_GUIDE.md} +0 -0
  201. /package/{DEPLOYMENT_STATUS.md → MD_Files/DEPLOYMENT_STATUS.md} +0 -0
  202. /package/{EXECUTIVE_REPORT.md → MD_Files/EXECUTIVE_REPORT.md} +0 -0
  203. /package/{GITHUB_OPTIMIZATION.md → MD_Files/GITHUB_OPTIMIZATION.md} +0 -0
  204. /package/{MARKETING_SUMMARY.md → MD_Files/MARKETING_SUMMARY.md} +0 -0
  205. /package/{NPM_PACKAGE_OPTIMIZATION.md → MD_Files/NPM_PACKAGE_OPTIMIZATION.md} +0 -0
  206. /package/{NPM_PUBLISH.md → MD_Files/NPM_PUBLISH.md} +0 -0
  207. /package/{PROJECT_SUMMARY.txt → MD_Files/PROJECT_SUMMARY.txt} +0 -0
  208. /package/{QUICKSTART.md → MD_Files/QUICKSTART.md} +0 -0
  209. /package/{SETUP_GITHUB.md → MD_Files/SETUP_GITHUB.md} +0 -0
  210. /package/{TESTING_SUMMARY.md → MD_Files/TESTING_SUMMARY.md} +0 -0
  211. /package/{setup-github.sh → MD_Files/setup-github.sh} +0 -0
@@ -0,0 +1,90 @@
1
+ export class Router {
2
+ constructor() {
3
+ this.routes = [];
4
+ this.currentRoute = null;
5
+ this.onRouteChange = null;
6
+ this.listenToHashChanges();
7
+ }
8
+ register(path, handler, title) {
9
+ this.routes.push({ path, handler, title });
10
+ }
11
+ navigate(path) {
12
+ window.location.hash = `#/${path}`.replace('##', '#');
13
+ }
14
+ getCurrentPath() {
15
+ return window.location.hash.slice(2) || '';
16
+ }
17
+ listenToHashChanges() {
18
+ window.addEventListener('hashchange', () => {
19
+ this.route();
20
+ });
21
+ this.route();
22
+ }
23
+ route() {
24
+ const path = this.getCurrentPath();
25
+ const route = this.matchRoute(path);
26
+ if (route) {
27
+ const params = this.extractParams(route.path, path);
28
+ this.currentRoute = route;
29
+ if (route.title) {
30
+ document.title = route.title;
31
+ }
32
+ try {
33
+ route.handler(params);
34
+ }
35
+ catch (error) {
36
+ console.error('Route handler error:', error);
37
+ }
38
+ if (this.onRouteChange) {
39
+ this.onRouteChange(route);
40
+ }
41
+ }
42
+ else {
43
+ console.warn(`No route found for: ${path}`);
44
+ }
45
+ }
46
+ matchRoute(path) {
47
+ const exactMatch = this.routes.find((r) => r.path === path || r.path === `/${path}`);
48
+ if (exactMatch)
49
+ return exactMatch;
50
+ for (const route of this.routes) {
51
+ if (this.pathMatches(route.path, path)) {
52
+ return route;
53
+ }
54
+ }
55
+ return null;
56
+ }
57
+ pathMatches(routePath, actualPath) {
58
+ const routeParts = routePath.split('/').filter(Boolean);
59
+ const actualParts = actualPath.split('/').filter(Boolean);
60
+ if (routeParts.length !== actualParts.length) {
61
+ return false;
62
+ }
63
+ return routeParts.every((part, i) => {
64
+ return part.startsWith(':') || part === actualParts[i];
65
+ });
66
+ }
67
+ extractParams(routePath, actualPath) {
68
+ const params = {};
69
+ const routeParts = routePath.split('/').filter(Boolean);
70
+ const actualParts = actualPath.split('/').filter(Boolean);
71
+ routeParts.forEach((part, i) => {
72
+ if (part.startsWith(':')) {
73
+ const paramName = part.slice(1);
74
+ params[paramName] = decodeURIComponent(actualParts[i]);
75
+ }
76
+ });
77
+ return params;
78
+ }
79
+ onchange(callback) {
80
+ this.onRouteChange = callback;
81
+ }
82
+ getRoutes() {
83
+ return this.routes;
84
+ }
85
+ getCurrentRoute() {
86
+ return this.currentRoute;
87
+ }
88
+ }
89
+ export const router = new Router();
90
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../../src/ui/client/utils/router.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,17 @@
1
1
  export declare class GUIServer {
2
2
  private port;
3
3
  private server;
4
+ private spaHtml;
4
5
  constructor(port?: number);
5
6
  start(): Promise<void>;
6
7
  stop(): Promise<void>;
8
+ private handleRequest;
7
9
  private handleAPIRequest;
8
- private getIndexHTML;
10
+ private serveStaticAsset;
11
+ private serveSPA;
12
+ private loadSPAHtml;
13
+ private getContentType;
14
+ private setCORSHeaders;
9
15
  }
16
+ export default GUIServer;
10
17
  //# sourceMappingURL=guiServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"guiServer.d.ts","sourceRoot":"","sources":["../../src/ui/guiServer.ts"],"names":[],"mappings":"AASA,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAM;gBAER,IAAI,GAAE,MAAa;IAOzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,YAAY;CA4FrB"}
1
+ {"version":3,"file":"guiServer.d.ts","sourceRoot":"","sources":["../../src/ui/guiServer.ts"],"names":[],"mappings":"AAoBA,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAuB;gBAE1B,IAAI,GAAE,MAAa;IAOzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAUb,aAAa;IAqC3B,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,QAAQ;IAkChB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,cAAc;CAMvB;AAGD,eAAe,SAAS,CAAC"}
@@ -1,134 +1,172 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GUIServer = void 0;
4
- const http_1 = require("http");
5
- const logger_1 = require("../utils/logger");
6
- class GUIServer {
1
+ import { createServer } from 'http';
2
+ import { readFileSync, existsSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { dirname } from 'path';
6
+ import { Logger } from '../utils/logger.js';
7
+ import { sendError } from './server/middleware/errorHandler.js';
8
+ import { handleAppRoutes } from './server/routes/apps.js';
9
+ import { handleDashboardRoutes } from './server/routes/dashboard.js';
10
+ import { handleSettingsRoutes } from './server/routes/settings.js';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = dirname(__filename);
13
+ export class GUIServer {
7
14
  constructor(port = 3000) {
8
15
  this.port = 3000;
16
+ this.spaHtml = null;
9
17
  this.port = port;
10
18
  }
11
19
  async start() {
12
- logger_1.Logger.info(`Starting AppClean GUI server on port ${this.port}...`);
13
- this.server = (0, http_1.createServer)((req, res) => {
14
- if (req.url === '/') {
15
- res.writeHead(200, { 'Content-Type': 'text/html' });
16
- res.end(this.getIndexHTML());
17
- }
18
- else if (req.url?.startsWith('/api/')) {
19
- this.handleAPIRequest(req, res);
20
- }
21
- else {
22
- res.writeHead(404, { 'Content-Type': 'text/plain' });
23
- res.end('Not Found');
24
- }
20
+ Logger.info(`Starting AppClean GUI server on port ${this.port}...`);
21
+ this.loadSPAHtml();
22
+ this.server = createServer((req, res) => {
23
+ this.handleRequest(req, res);
25
24
  });
26
- this.server.listen(this.port, () => {
27
- logger_1.Logger.success(`GUI server running at http://localhost:${this.port}`);
25
+ return new Promise((resolve) => {
26
+ this.server.listen(this.port, () => {
27
+ Logger.success(`✨ AppClean GUI running at http://localhost:${this.port}`);
28
+ Logger.info('Press Ctrl+C to stop the server');
29
+ resolve();
30
+ });
28
31
  });
29
32
  }
30
33
  async stop() {
31
34
  if (this.server) {
32
35
  this.server.close();
33
- logger_1.Logger.info('GUI server stopped');
36
+ Logger.info('GUI server stopped');
34
37
  }
35
38
  }
36
- handleAPIRequest(req, res) {
37
- res.writeHead(200, { 'Content-Type': 'application/json' });
38
- res.end(JSON.stringify({ message: 'API endpoint' }));
39
+ async handleRequest(req, res) {
40
+ const url = req.url || '/';
41
+ const method = req.method || 'GET';
42
+ const pathname = url.split('?')[0];
43
+ this.setCORSHeaders(res);
44
+ if (method === 'OPTIONS') {
45
+ res.writeHead(200);
46
+ res.end();
47
+ return;
48
+ }
49
+ try {
50
+ if (pathname.startsWith('/api/')) {
51
+ return this.handleAPIRequest(method, pathname, req, res);
52
+ }
53
+ if (pathname.startsWith('/static/')) {
54
+ return this.serveStaticAsset(pathname, res);
55
+ }
56
+ this.serveSPA(res);
57
+ }
58
+ catch (error) {
59
+ Logger.error(`Request error: ${error.message}`);
60
+ sendError(res, 'Internal server error', 500);
61
+ }
62
+ }
63
+ handleAPIRequest(method, pathname, req, res) {
64
+ if (handleAppRoutes(method, pathname, req, res)) {
65
+ return;
66
+ }
67
+ if (handleDashboardRoutes(method, pathname, req, res)) {
68
+ return;
69
+ }
70
+ if (handleSettingsRoutes(method, pathname, req, res)) {
71
+ return;
72
+ }
73
+ sendError(res, 'API endpoint not found', 404);
74
+ }
75
+ serveStaticAsset(pathname, res) {
76
+ const relativePath = pathname.slice(8);
77
+ if (relativePath.includes('..')) {
78
+ sendError(res, 'Access denied', 403);
79
+ return;
80
+ }
81
+ const filePath = join(__dirname, 'client', relativePath);
82
+ if (!existsSync(filePath)) {
83
+ sendError(res, 'Asset not found', 404);
84
+ return;
85
+ }
86
+ try {
87
+ const content = readFileSync(filePath);
88
+ const contentType = this.getContentType(filePath);
89
+ res.writeHead(200, {
90
+ 'Content-Type': contentType,
91
+ 'Cache-Control': 'public, max-age=3600',
92
+ });
93
+ res.end(content);
94
+ }
95
+ catch (error) {
96
+ Logger.warn(`Failed to serve asset ${pathname}: ${error.message}`);
97
+ sendError(res, 'Failed to load asset', 500);
98
+ }
39
99
  }
40
- getIndexHTML() {
41
- return `
100
+ serveSPA(res) {
101
+ if (!this.spaHtml) {
102
+ const fallbackHtml = `
42
103
  <!DOCTYPE html>
43
- <html lang="en">
104
+ <html>
44
105
  <head>
45
106
  <meta charset="UTF-8">
46
107
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
47
- <title>AppClean GUI - v1.2.0</title>
48
- <style>
49
- * {
50
- margin: 0;
51
- padding: 0;
52
- box-sizing: border-box;
53
- }
54
- body {
55
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
56
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
57
- min-height: 100vh;
58
- display: flex;
59
- align-items: center;
60
- justify-content: center;
61
- padding: 20px;
62
- }
63
- .container {
64
- background: white;
65
- border-radius: 12px;
66
- box-shadow: 0 20px 60px rgba(0,0,0,0.3);
67
- max-width: 800px;
68
- width: 100%;
69
- padding: 40px;
70
- }
71
- h1 {
72
- color: #333;
73
- margin-bottom: 10px;
74
- }
75
- .version {
76
- color: #666;
77
- font-size: 14px;
78
- margin-bottom: 30px;
79
- }
80
- .feature-badge {
81
- display: inline-block;
82
- background: #667eea;
83
- color: white;
84
- padding: 8px 16px;
85
- border-radius: 20px;
86
- font-size: 12px;
87
- font-weight: 600;
88
- margin-bottom: 20px;
108
+ <title>AppClean</title>
109
+ </head>
110
+ <body style="font-family: system-ui; padding: 20px; text-align: center;">
111
+ <h1>⚠️ GUI Not Ready</h1>
112
+ <p>The SPA assets haven't been compiled yet.</p>
113
+ <p>Run <code>npm run build</code> to compile the TypeScript/CSS files.</p>
114
+ <p>For now, use the CLI: <code>appclean --help</code></p>
115
+ </body>
116
+ </html>`;
117
+ res.writeHead(200, { 'Content-Type': 'text/html' });
118
+ res.end(fallbackHtml);
119
+ return;
120
+ }
121
+ res.writeHead(200, {
122
+ 'Content-Type': 'text/html',
123
+ 'Cache-Control': 'no-cache',
124
+ });
125
+ res.end(this.spaHtml);
89
126
  }
90
- p {
91
- color: #666;
92
- line-height: 1.6;
93
- margin-bottom: 20px;
127
+ loadSPAHtml() {
128
+ const htmlPath = join(__dirname, 'client', 'index.html');
129
+ try {
130
+ if (existsSync(htmlPath)) {
131
+ this.spaHtml = readFileSync(htmlPath, 'utf-8');
132
+ Logger.debug('✓ Loaded SPA HTML');
133
+ }
134
+ else {
135
+ Logger.warn(`⚠️ SPA HTML not found at ${htmlPath}`);
136
+ Logger.info('Make sure to run: npm run build');
137
+ }
138
+ }
139
+ catch (error) {
140
+ Logger.warn(`Failed to load SPA HTML: ${error.message}`);
141
+ }
94
142
  }
95
- .coming-soon {
96
- background: #f0f4ff;
97
- border-left: 4px solid #667eea;
98
- padding: 20px;
99
- border-radius: 4px;
100
- margin-top: 30px;
143
+ getContentType(filePath) {
144
+ const ext = filePath.toLowerCase().split('.').pop();
145
+ const typeMap = {
146
+ 'js': 'application/javascript; charset=utf-8',
147
+ 'css': 'text/css; charset=utf-8',
148
+ 'html': 'text/html; charset=utf-8',
149
+ 'json': 'application/json; charset=utf-8',
150
+ 'svg': 'image/svg+xml',
151
+ 'png': 'image/png',
152
+ 'jpg': 'image/jpeg',
153
+ 'jpeg': 'image/jpeg',
154
+ 'gif': 'image/gif',
155
+ 'ico': 'image/x-icon',
156
+ 'webp': 'image/webp',
157
+ 'woff': 'font/woff',
158
+ 'woff2': 'font/woff2',
159
+ 'ttf': 'font/ttf',
160
+ 'eot': 'application/vnd.ms-fontobject',
161
+ };
162
+ return typeMap[ext || ''] || 'application/octet-stream';
101
163
  }
102
- </style>
103
- </head>
104
- <body>
105
- <div class="container">
106
- <h1>🎨 AppClean GUI</h1>
107
- <p class="version">v1.2.0 - GUI Application Feature</p>
108
- <span class="feature-badge">Coming Soon</span>
109
-
110
- <p>
111
- A beautiful, intuitive graphical user interface for AppClean, bringing the power of
112
- intelligent app removal to users who prefer a visual interface.
113
- </p>
114
-
115
- <div class="coming-soon">
116
- <h3>🚀 Features Coming in v1.2.0</h3>
117
- <ul style="margin-left: 20px; margin-top: 10px;">
118
- <li>✨ Modern, responsive GUI design</li>
119
- <li>🖥️ Cross-platform support (macOS, Linux, Windows)</li>
120
- <li>🔍 Visual app search and discovery</li>
121
- <li>📊 Beautiful artifact visualization</li>
122
- <li>🗑️ Drag-and-drop app removal</li>
123
- <li>📈 Real-time removal progress</li>
124
- <li>📋 Interactive report viewer</li>
125
- </ul>
126
- </div>
127
- </div>
128
- </body>
129
- </html>
130
- `;
164
+ setCORSHeaders(res) {
165
+ res.setHeader('Access-Control-Allow-Origin', '*');
166
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
167
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
168
+ res.setHeader('Access-Control-Max-Age', '3600');
131
169
  }
132
170
  }
133
- exports.GUIServer = GUIServer;
171
+ export default GUIServer;
134
172
  //# sourceMappingURL=guiServer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guiServer.js","sourceRoot":"","sources":["../../src/ui/guiServer.ts"],"names":[],"mappings":";;;AAMA,+BAAoC;AACpC,4CAAyC;AAEzC,MAAa,SAAS;IAIpB,YAAY,OAAe,IAAI;QAHvB,SAAI,GAAW,IAAI,CAAC;QAI1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAKD,KAAK,CAAC,KAAK;QACT,eAAM,CAAC,IAAI,CAAC,wCAAwC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;QAEpE,IAAI,CAAC,MAAM,GAAG,IAAA,mBAAY,EAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACtC,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACpB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;gBACrD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;YACjC,eAAM,CAAC,OAAO,CAAC,0CAA0C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAKD,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,eAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAKO,gBAAgB,CAAC,GAAQ,EAAE,GAAQ;QAEzC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAKO,YAAY;QAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAyFN,CAAC;IACJ,CAAC;CACF;AAjJD,8BAiJC"}
1
+ {"version":3,"file":"guiServer.js","sourceRoot":"","sources":["../../src/ui/guiServer.ts"],"names":[],"mappings":"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"}
package/dist/ui/menu.js CHANGED
@@ -1,16 +1,7 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.showMainMenu = showMainMenu;
7
- exports.showAppMenu = showAppMenu;
8
- exports.showHeader = showHeader;
9
- exports.showHelp = showHelp;
10
- const inquirer_1 = __importDefault(require("inquirer"));
11
- const chalk_1 = __importDefault(require("chalk"));
12
- async function showMainMenu() {
13
- const { action } = await inquirer_1.default.prompt([
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ export async function showMainMenu() {
4
+ const { action } = await inquirer.prompt([
14
5
  {
15
6
  type: 'list',
16
7
  name: 'action',
@@ -25,8 +16,8 @@ async function showMainMenu() {
25
16
  ]);
26
17
  return action;
27
18
  }
28
- async function showAppMenu() {
29
- const { action } = await inquirer_1.default.prompt([
19
+ export async function showAppMenu() {
20
+ const { action } = await inquirer.prompt([
30
21
  {
31
22
  type: 'list',
32
23
  name: 'action',
@@ -40,22 +31,22 @@ async function showAppMenu() {
40
31
  ]);
41
32
  return action;
42
33
  }
43
- function showHeader() {
34
+ export function showHeader() {
44
35
  console.clear();
45
- console.log(chalk_1.default.cyan(`
36
+ console.log(chalk.cyan(`
46
37
  ╔═══════════════════════════════════════════════════════════╗
47
38
  ║ ║
48
- ║ ${chalk_1.default.bold('AppClean - App Uninstaller')} ║
39
+ ║ ${chalk.bold('AppClean - App Uninstaller')} ║
49
40
  ║ Remove apps and all their artifacts ║
50
41
  ║ ║
51
42
  ╚═══════════════════════════════════════════════════════════╝
52
43
  `));
53
44
  }
54
- function showHelp() {
55
- console.log(chalk_1.default.cyan(`
56
- ${chalk_1.default.bold('AppClean - Help')}
45
+ export function showHelp() {
46
+ console.log(chalk.cyan(`
47
+ ${chalk.bold('AppClean - Help')}
57
48
 
58
- ${chalk_1.default.bold('Features:')}
49
+ ${chalk.bold('Features:')}
59
50
  • Search and find all installed applications
60
51
  • Identify installation method (npm, brew, apt, custom, etc)
61
52
  • Locate all related files, configs, and caches
@@ -63,31 +54,31 @@ ${chalk_1.default.bold('Features:')}
63
54
  • Create backups before deletion
64
55
  • Cross-platform support (macOS, Linux, Windows)
65
56
 
66
- ${chalk_1.default.bold('Commands:')}
57
+ ${chalk.bold('Commands:')}
67
58
  appclean Start interactive mode
68
59
  appclean search <name> Search for an app
69
60
  appclean remove <name> Remove an app
70
61
  appclean list List all apps
71
62
  appclean analyze <name> Show app artifacts
72
63
 
73
- ${chalk_1.default.bold('Options:')}
64
+ ${chalk.bold('Options:')}
74
65
  --dry-run Preview without deleting
75
66
  --backup Create backup before removal
76
67
  --help Show this help message
77
68
  --version Show version
78
69
 
79
- ${chalk_1.default.bold('Examples:')}
70
+ ${chalk.bold('Examples:')}
80
71
  appclean search nodejs Search for nodejs
81
72
  appclean remove myapp --dry-run Preview removal
82
73
  appclean list | grep npm Find npm-installed apps
83
74
 
84
- ${chalk_1.default.bold('Safety:')}
75
+ ${chalk.bold('Safety:')}
85
76
  • Always previews what will be deleted
86
77
  • Use --dry-run first to see what will happen
87
78
  • Use --backup to create backups before deletion
88
79
  • Double confirmation before actual removal
89
80
 
90
- ${chalk_1.default.bold('Website:')} https://github.com/YOUR_USERNAME/appclean
81
+ ${chalk.bold('Website:')} https://github.com/YOUR_USERNAME/appclean
91
82
  `));
92
83
  }
93
84
  //# sourceMappingURL=menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/ui/menu.ts"],"names":[],"mappings":";;;;;AAUA,oCAgBC;AAED,kCAeC;AAED,gCAYC;AAED,4BAwCC;AAnGD,wDAAgC;AAChC,kDAA0B;AASnB,KAAK,UAAU,YAAY;IAChC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACvC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAClD,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,UAAU,EAAE;gBACzD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;gBACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;aAClC;SACF;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,WAAW;IAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACvC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,SAAS,EAAE;gBAC3D,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACjD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE;aAC9C;SACF;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,UAAU;IACxB,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC;;;eAGA,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;;;;GAIpD,CAAC,CACD,CAAC;AACJ,CAAC;AAED,SAAgB,QAAQ;IACtB,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC;EACb,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;;EAE7B,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;;;;;;;EAQvB,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;;;;;;EAOvB,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC;;;;;;EAMtB,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;;;;EAKvB,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC;;;;;;EAMrB,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC;GACrB,CAAC,CACD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/ui/menu.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACvC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAClD,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,UAAU,EAAE;gBACzD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;gBACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;aAClC;SACF;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACvC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,SAAS,EAAE;gBAC3D,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACjD,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE;aAC9C;SACF;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC;;;eAGA,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC;;;;GAIpD,CAAC,CACD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC;EACb,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;;EAE7B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;;;;;;;EAQvB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;;;;;;EAOvB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;;;;;;EAMtB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;;;;;EAKvB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;;;;;;EAMrB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;GACrB,CAAC,CACD,CAAC;AACJ,CAAC"}