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.
Files changed (212) hide show
  1. package/.github/workflows/npm-publish.yml +61 -0
  2. package/DEVELOPMENT.md +84 -0
  3. package/GUI_IMPLEMENTATION_STATUS.md +143 -0
  4. package/MD_Files/INDEX.md +51 -0
  5. package/PHASE2_COMPLETION.md +281 -0
  6. package/PHASE3_COMPLETION.md +364 -0
  7. package/README.md +411 -91
  8. package/RELEASE_GUIDE.md +236 -0
  9. package/assets/logo.svg +34 -0
  10. package/dist/core/appUpdateChecker.js +12 -16
  11. package/dist/core/appUpdateChecker.js.map +1 -1
  12. package/dist/core/detector.js +14 -18
  13. package/dist/core/detector.js.map +1 -1
  14. package/dist/core/duplicateFileFinder.js +12 -19
  15. package/dist/core/duplicateFileFinder.js.map +1 -1
  16. package/dist/core/orphanedDependencyDetector.js +19 -26
  17. package/dist/core/orphanedDependencyDetector.js.map +1 -1
  18. package/dist/core/performanceOptimizer.js +6 -10
  19. package/dist/core/performanceOptimizer.js.map +1 -1
  20. package/dist/core/permissionHandler.js +21 -25
  21. package/dist/core/permissionHandler.js.map +1 -1
  22. package/dist/core/pluginSystem.js +9 -13
  23. package/dist/core/pluginSystem.js.map +1 -1
  24. package/dist/core/removalRecorder.js +12 -19
  25. package/dist/core/removalRecorder.js.map +1 -1
  26. package/dist/core/remover.js +59 -66
  27. package/dist/core/remover.js.map +1 -1
  28. package/dist/core/reportGenerator.d.ts +1 -1
  29. package/dist/core/reportGenerator.d.ts.map +1 -1
  30. package/dist/core/reportGenerator.js +27 -34
  31. package/dist/core/reportGenerator.js.map +1 -1
  32. package/dist/core/scheduledCleanup.js +23 -30
  33. package/dist/core/scheduledCleanup.js.map +1 -1
  34. package/dist/core/serviceFileDetector.js +24 -31
  35. package/dist/core/serviceFileDetector.js.map +1 -1
  36. package/dist/core/verificationModule.js +10 -14
  37. package/dist/core/verificationModule.js.map +1 -1
  38. package/dist/index.js +118 -156
  39. package/dist/index.js.map +1 -1
  40. package/dist/managers/brewManager.js +30 -37
  41. package/dist/managers/brewManager.js.map +1 -1
  42. package/dist/managers/customManager.js +23 -30
  43. package/dist/managers/customManager.js.map +1 -1
  44. package/dist/managers/linuxManager.js +29 -36
  45. package/dist/managers/linuxManager.js.map +1 -1
  46. package/dist/managers/npmManager.js +27 -34
  47. package/dist/managers/npmManager.js.map +1 -1
  48. package/dist/types/index.js +1 -2
  49. package/dist/ui/client/api/client.d.ts +24 -0
  50. package/dist/ui/client/api/client.d.ts.map +1 -0
  51. package/dist/ui/client/api/client.js +100 -0
  52. package/dist/ui/client/api/client.js.map +1 -0
  53. package/dist/ui/client/app.d.ts +7 -0
  54. package/dist/ui/client/app.d.ts.map +1 -0
  55. package/dist/ui/client/app.js +75 -0
  56. package/dist/ui/client/app.js.map +1 -0
  57. package/dist/ui/client/index.html +107 -0
  58. package/dist/ui/client/pages/appDetails.d.ts +8 -0
  59. package/dist/ui/client/pages/appDetails.d.ts.map +1 -0
  60. package/dist/ui/client/pages/appDetails.js +287 -0
  61. package/dist/ui/client/pages/appDetails.js.map +1 -0
  62. package/dist/ui/client/pages/appSearch.d.ts +2 -0
  63. package/dist/ui/client/pages/appSearch.d.ts.map +1 -0
  64. package/dist/ui/client/pages/appSearch.js +221 -0
  65. package/dist/ui/client/pages/appSearch.js.map +1 -0
  66. package/dist/ui/client/pages/dashboard.d.ts +2 -0
  67. package/dist/ui/client/pages/dashboard.d.ts.map +1 -0
  68. package/dist/ui/client/pages/dashboard.js +175 -0
  69. package/dist/ui/client/pages/dashboard.js.map +1 -0
  70. package/dist/ui/client/pages/settings.d.ts +7 -0
  71. package/dist/ui/client/pages/settings.d.ts.map +1 -0
  72. package/dist/ui/client/pages/settings.js +279 -0
  73. package/dist/ui/client/pages/settings.js.map +1 -0
  74. package/dist/ui/client/state/appStore.d.ts +38 -0
  75. package/dist/ui/client/state/appStore.d.ts.map +1 -0
  76. package/dist/ui/client/state/appStore.js +130 -0
  77. package/dist/ui/client/state/appStore.js.map +1 -0
  78. package/dist/ui/client/state/dashboardStore.d.ts +31 -0
  79. package/dist/ui/client/state/dashboardStore.d.ts.map +1 -0
  80. package/dist/ui/client/state/dashboardStore.js +76 -0
  81. package/dist/ui/client/state/dashboardStore.js.map +1 -0
  82. package/dist/ui/client/state/uiStore.d.ts +43 -0
  83. package/dist/ui/client/state/uiStore.d.ts.map +1 -0
  84. package/dist/ui/client/state/uiStore.js +109 -0
  85. package/dist/ui/client/state/uiStore.js.map +1 -0
  86. package/dist/ui/client/styles/animations.css +349 -0
  87. package/dist/ui/client/styles/base.css +214 -0
  88. package/dist/ui/client/styles/components.css +400 -0
  89. package/dist/ui/client/styles/layout.css +224 -0
  90. package/dist/ui/client/styles/variables.css +140 -0
  91. package/dist/ui/client/utils/events.d.ts +19 -0
  92. package/dist/ui/client/utils/events.d.ts.map +1 -0
  93. package/dist/ui/client/utils/events.js +54 -0
  94. package/dist/ui/client/utils/events.js.map +1 -0
  95. package/dist/ui/client/utils/formatting.d.ts +11 -0
  96. package/dist/ui/client/utils/formatting.d.ts.map +1 -0
  97. package/dist/ui/client/utils/formatting.js +104 -0
  98. package/dist/ui/client/utils/formatting.js.map +1 -0
  99. package/dist/ui/client/utils/router.d.ts +25 -0
  100. package/dist/ui/client/utils/router.d.ts.map +1 -0
  101. package/dist/ui/client/utils/router.js +90 -0
  102. package/dist/ui/client/utils/router.js.map +1 -0
  103. package/dist/ui/guiServer.d.ts +11 -5
  104. package/dist/ui/guiServer.d.ts.map +1 -1
  105. package/dist/ui/guiServer.js +180 -501
  106. package/dist/ui/guiServer.js.map +1 -1
  107. package/dist/ui/menu.js +18 -27
  108. package/dist/ui/menu.js.map +1 -1
  109. package/dist/ui/prompts.js +34 -47
  110. package/dist/ui/prompts.js.map +1 -1
  111. package/dist/ui/server/middleware/errorHandler.d.ts +19 -0
  112. package/dist/ui/server/middleware/errorHandler.d.ts.map +1 -0
  113. package/dist/ui/server/middleware/errorHandler.js +100 -0
  114. package/dist/ui/server/middleware/errorHandler.js.map +1 -0
  115. package/dist/ui/server/routes/apps.d.ts +8 -0
  116. package/dist/ui/server/routes/apps.d.ts.map +1 -0
  117. package/dist/ui/server/routes/apps.js +74 -0
  118. package/dist/ui/server/routes/apps.js.map +1 -0
  119. package/dist/ui/server/routes/dashboard.d.ts +4 -0
  120. package/dist/ui/server/routes/dashboard.d.ts.map +1 -0
  121. package/dist/ui/server/routes/dashboard.js +57 -0
  122. package/dist/ui/server/routes/dashboard.js.map +1 -0
  123. package/dist/ui/server/routes/settings.d.ts +6 -0
  124. package/dist/ui/server/routes/settings.d.ts.map +1 -0
  125. package/dist/ui/server/routes/settings.js +31 -0
  126. package/dist/ui/server/routes/settings.js.map +1 -0
  127. package/dist/ui/server/services/appService.d.ts +45 -0
  128. package/dist/ui/server/services/appService.d.ts.map +1 -0
  129. package/dist/ui/server/services/appService.js +114 -0
  130. package/dist/ui/server/services/appService.js.map +1 -0
  131. package/dist/ui/server/services/removalService.d.ts +24 -0
  132. package/dist/ui/server/services/removalService.d.ts.map +1 -0
  133. package/dist/ui/server/services/removalService.js +83 -0
  134. package/dist/ui/server/services/removalService.js.map +1 -0
  135. package/dist/utils/filesystem.js +32 -49
  136. package/dist/utils/filesystem.js.map +1 -1
  137. package/dist/utils/logger.js +9 -18
  138. package/dist/utils/logger.js.map +1 -1
  139. package/dist/utils/platform.js +10 -22
  140. package/dist/utils/platform.js.map +1 -1
  141. package/dist/utils/upgrade.d.ts +2 -1
  142. package/dist/utils/upgrade.d.ts.map +1 -1
  143. package/dist/utils/upgrade.js +24 -15
  144. package/dist/utils/upgrade.js.map +1 -1
  145. package/package.json +4 -2
  146. package/scripts/publish-npm.sh +64 -0
  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 +8 -8
  161. package/src/managers/brewManager.ts +3 -3
  162. package/src/managers/customManager.ts +2 -2
  163. package/src/managers/linuxManager.ts +3 -3
  164. package/src/managers/npmManager.ts +3 -3
  165. package/src/ui/client/api/client.ts +168 -0
  166. package/src/ui/client/app.ts +125 -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 +283 -0
  170. package/src/ui/client/pages/dashboard.ts +211 -0
  171. package/src/ui/client/pages/settings.ts +342 -0
  172. package/src/ui/client/state/appStore.ts +181 -0
  173. package/src/ui/client/state/dashboardStore.ts +123 -0
  174. package/src/ui/client/state/uiStore.ts +166 -0
  175. package/src/ui/client/styles/animations.css +349 -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 +245 -498
  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 +19 -2
  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/{PUBLICATION_SUCCESS_REPORT.md โ†’ MD_Files/PUBLICATION_SUCCESS_REPORT.md} +0 -0
  209. /package/{QUICKSTART.md โ†’ MD_Files/QUICKSTART.md} +0 -0
  210. /package/{SETUP_GITHUB.md โ†’ MD_Files/SETUP_GITHUB.md} +0 -0
  211. /package/{TESTING_SUMMARY.md โ†’ MD_Files/TESTING_SUMMARY.md} +0 -0
  212. /package/{setup-github.sh โ†’ MD_Files/setup-github.sh} +0 -0
@@ -1,30 +1,24 @@
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.NpmManager = void 0;
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 (0, child_process_1.execSync)('npm config get prefix').toString().trim();
12
+ return execSync('npm config get prefix').toString().trim();
19
13
  }
20
14
  catch {
21
- return path_1.default.join((0, platform_1.getHomeDir)(), '.npm-global');
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 = (0, child_process_1.execSync)('npm list -g --json --depth=0').toString();
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: path_1.default.join(this.globalNpmPath, 'lib', 'node_modules', name),
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
- logger_1.Logger.debug('Failed to get npm packages: ' + error.message);
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 = (0, platform_1.getHomeDir)();
49
- const packagePath = path_1.default.join(this.globalNpmPath, 'lib', 'node_modules', appName);
50
- if ((0, filesystem_1.pathExists)(packagePath)) {
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 = path_1.default.join(this.globalNpmPath, 'bin', appName);
59
- if ((0, filesystem_1.pathExists)(binPath)) {
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
- path_1.default.join(home, `.${appName}rc`),
69
- path_1.default.join(home, `.${appName}rc.json`),
70
- path_1.default.join(home, `.config`, appName),
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 ((0, filesystem_1.pathExists)(configPath)) {
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
- path_1.default.join(home, `.cache`, appName),
84
- path_1.default.join(home, `Library`, `Caches`, appName),
77
+ path.join(home, `.cache`, appName),
78
+ path.join(home, `Library`, `Caches`, appName),
85
79
  ];
86
80
  for (const cachePath of cachePaths) {
87
- if ((0, filesystem_1.pathExists)(cachePath)) {
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 = path_1.default.join(home, `.local`, `share`, appName);
97
- if ((0, filesystem_1.pathExists)(dataPath)) {
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
- (0, child_process_1.execSync)(`npm uninstall -g ${appName}`);
103
+ execSync(`npm uninstall -g ${appName}`);
110
104
  return true;
111
105
  }
112
106
  catch (error) {
113
- logger_1.Logger.debug('Failed to uninstall npm package: ' + error.message);
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":"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"}
1
+ {"version":3,"file":"npmManager.js","sourceRoot":"","sources":["../../src/managers/npmManager.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=index.js.map
@@ -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">&times;</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,8 @@
1
+ export interface AppAnalysis {
2
+ app: any;
3
+ artifacts: any[];
4
+ totalSize: number;
5
+ breakdown: Record<string, number>;
6
+ }
7
+ export declare function renderAppDetails(appName: string): Promise<void>;
8
+ //# sourceMappingURL=appDetails.d.ts.map
@@ -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"}