appclean 1.8.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 (154) hide show
  1. package/.github/workflows/publish.yml +41 -0
  2. package/.github/workflows/test.yml +37 -0
  3. package/ACTION_CHECKLIST.md +342 -0
  4. package/APPCLEAN_SUMMARY.md +309 -0
  5. package/CHANGELOG.md +205 -0
  6. package/CODE_OF_CONDUCT.md +49 -0
  7. package/CODE_REVIEW_REPORT.md +447 -0
  8. package/COMMUNITY_POSTS.md +307 -0
  9. package/CONTRIBUTING.md +121 -0
  10. package/DEPLOYMENT_GUIDE.md +345 -0
  11. package/DEPLOYMENT_STATUS.md +182 -0
  12. package/EXECUTIVE_REPORT.md +393 -0
  13. package/GITHUB_OPTIMIZATION.md +383 -0
  14. package/INDEX.md +165 -0
  15. package/LICENSE +21 -0
  16. package/MARKETING_SUMMARY.md +352 -0
  17. package/NPM_PACKAGE_OPTIMIZATION.md +281 -0
  18. package/NPM_PUBLISH.md +116 -0
  19. package/PROJECT_SUMMARY.txt +249 -0
  20. package/QUICKSTART.md +219 -0
  21. package/README.md +548 -0
  22. package/SECURITY.md +104 -0
  23. package/SETUP_GITHUB.md +237 -0
  24. package/TESTING_SUMMARY.md +379 -0
  25. package/dist/core/appUpdateChecker.d.ts +23 -0
  26. package/dist/core/appUpdateChecker.d.ts.map +1 -0
  27. package/dist/core/appUpdateChecker.js +159 -0
  28. package/dist/core/appUpdateChecker.js.map +1 -0
  29. package/dist/core/detector.d.ts +13 -0
  30. package/dist/core/detector.d.ts.map +1 -0
  31. package/dist/core/detector.js +99 -0
  32. package/dist/core/detector.js.map +1 -0
  33. package/dist/core/duplicateFileFinder.d.ts +14 -0
  34. package/dist/core/duplicateFileFinder.d.ts.map +1 -0
  35. package/dist/core/duplicateFileFinder.js +80 -0
  36. package/dist/core/duplicateFileFinder.js.map +1 -0
  37. package/dist/core/orphanedDependencyDetector.d.ts +19 -0
  38. package/dist/core/orphanedDependencyDetector.d.ts.map +1 -0
  39. package/dist/core/orphanedDependencyDetector.js +148 -0
  40. package/dist/core/orphanedDependencyDetector.js.map +1 -0
  41. package/dist/core/performanceOptimizer.d.ts +37 -0
  42. package/dist/core/performanceOptimizer.d.ts.map +1 -0
  43. package/dist/core/performanceOptimizer.js +128 -0
  44. package/dist/core/performanceOptimizer.js.map +1 -0
  45. package/dist/core/permissionHandler.d.ts +9 -0
  46. package/dist/core/permissionHandler.d.ts.map +1 -0
  47. package/dist/core/permissionHandler.js +89 -0
  48. package/dist/core/permissionHandler.js.map +1 -0
  49. package/dist/core/pluginSystem.d.ts +39 -0
  50. package/dist/core/pluginSystem.d.ts.map +1 -0
  51. package/dist/core/pluginSystem.js +120 -0
  52. package/dist/core/pluginSystem.js.map +1 -0
  53. package/dist/core/removalRecorder.d.ts +32 -0
  54. package/dist/core/removalRecorder.d.ts.map +1 -0
  55. package/dist/core/removalRecorder.js +79 -0
  56. package/dist/core/removalRecorder.js.map +1 -0
  57. package/dist/core/remover.d.ts +15 -0
  58. package/dist/core/remover.d.ts.map +1 -0
  59. package/dist/core/remover.js +225 -0
  60. package/dist/core/remover.js.map +1 -0
  61. package/dist/core/reportGenerator.d.ts +9 -0
  62. package/dist/core/reportGenerator.d.ts.map +1 -0
  63. package/dist/core/reportGenerator.js +328 -0
  64. package/dist/core/reportGenerator.js.map +1 -0
  65. package/dist/core/scheduledCleanup.d.ts +38 -0
  66. package/dist/core/scheduledCleanup.d.ts.map +1 -0
  67. package/dist/core/scheduledCleanup.js +127 -0
  68. package/dist/core/scheduledCleanup.js.map +1 -0
  69. package/dist/core/serviceFileDetector.d.ts +18 -0
  70. package/dist/core/serviceFileDetector.d.ts.map +1 -0
  71. package/dist/core/serviceFileDetector.js +136 -0
  72. package/dist/core/serviceFileDetector.js.map +1 -0
  73. package/dist/core/verificationModule.d.ts +14 -0
  74. package/dist/core/verificationModule.d.ts.map +1 -0
  75. package/dist/core/verificationModule.js +102 -0
  76. package/dist/core/verificationModule.js.map +1 -0
  77. package/dist/index.d.ts +3 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +333 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/managers/brewManager.d.ts +10 -0
  82. package/dist/managers/brewManager.d.ts.map +1 -0
  83. package/dist/managers/brewManager.js +130 -0
  84. package/dist/managers/brewManager.js.map +1 -0
  85. package/dist/managers/customManager.d.ts +8 -0
  86. package/dist/managers/customManager.d.ts.map +1 -0
  87. package/dist/managers/customManager.js +139 -0
  88. package/dist/managers/customManager.js.map +1 -0
  89. package/dist/managers/linuxManager.d.ts +10 -0
  90. package/dist/managers/linuxManager.d.ts.map +1 -0
  91. package/dist/managers/linuxManager.js +191 -0
  92. package/dist/managers/linuxManager.js.map +1 -0
  93. package/dist/managers/npmManager.d.ts +10 -0
  94. package/dist/managers/npmManager.d.ts.map +1 -0
  95. package/dist/managers/npmManager.js +119 -0
  96. package/dist/managers/npmManager.js.map +1 -0
  97. package/dist/types/index.d.ts +44 -0
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/index.js +3 -0
  100. package/dist/types/index.js.map +1 -0
  101. package/dist/ui/guiServer.d.ts +10 -0
  102. package/dist/ui/guiServer.d.ts.map +1 -0
  103. package/dist/ui/guiServer.js +134 -0
  104. package/dist/ui/guiServer.js.map +1 -0
  105. package/dist/ui/menu.d.ts +6 -0
  106. package/dist/ui/menu.d.ts.map +1 -0
  107. package/dist/ui/menu.js +93 -0
  108. package/dist/ui/menu.js.map +1 -0
  109. package/dist/ui/prompts.d.ts +13 -0
  110. package/dist/ui/prompts.d.ts.map +1 -0
  111. package/dist/ui/prompts.js +161 -0
  112. package/dist/ui/prompts.js.map +1 -0
  113. package/dist/utils/filesystem.d.ts +13 -0
  114. package/dist/utils/filesystem.d.ts.map +1 -0
  115. package/dist/utils/filesystem.js +152 -0
  116. package/dist/utils/filesystem.js.map +1 -0
  117. package/dist/utils/logger.d.ts +12 -0
  118. package/dist/utils/logger.d.ts.map +1 -0
  119. package/dist/utils/logger.js +49 -0
  120. package/dist/utils/logger.js.map +1 -0
  121. package/dist/utils/platform.d.ts +9 -0
  122. package/dist/utils/platform.d.ts.map +1 -0
  123. package/dist/utils/platform.js +75 -0
  124. package/dist/utils/platform.js.map +1 -0
  125. package/jest.config.js +20 -0
  126. package/logo.svg +60 -0
  127. package/package.json +55 -0
  128. package/setup-github.sh +125 -0
  129. package/src/core/appUpdateChecker.ts +220 -0
  130. package/src/core/detector.ts +133 -0
  131. package/src/core/duplicateFileFinder.ts +113 -0
  132. package/src/core/orphanedDependencyDetector.ts +195 -0
  133. package/src/core/performanceOptimizer.ts +209 -0
  134. package/src/core/permissionHandler.ts +121 -0
  135. package/src/core/pluginSystem.ts +194 -0
  136. package/src/core/removalRecorder.ts +146 -0
  137. package/src/core/remover.ts +280 -0
  138. package/src/core/reportGenerator.ts +354 -0
  139. package/src/core/scheduledCleanup.ts +204 -0
  140. package/src/core/serviceFileDetector.ts +181 -0
  141. package/src/core/verificationModule.ts +140 -0
  142. package/src/index.ts +449 -0
  143. package/src/managers/brewManager.ts +149 -0
  144. package/src/managers/customManager.ts +167 -0
  145. package/src/managers/linuxManager.ts +210 -0
  146. package/src/managers/npmManager.ts +137 -0
  147. package/src/types/index.ts +59 -0
  148. package/src/ui/guiServer.ts +155 -0
  149. package/src/ui/menu.ts +100 -0
  150. package/src/ui/prompts.ts +177 -0
  151. package/src/utils/filesystem.ts +145 -0
  152. package/src/utils/logger.ts +48 -0
  153. package/src/utils/platform.ts +75 -0
  154. package/tsconfig.json +20 -0
@@ -0,0 +1,10 @@
1
+ import { InstalledApp, ArtifactPath } from '../types';
2
+ export declare class LinuxManager {
3
+ private packageManager;
4
+ constructor();
5
+ private detectPackageManager;
6
+ getInstalledPackages(): Promise<InstalledApp[]>;
7
+ findArtifacts(appName: string): Promise<ArtifactPath[]>;
8
+ removePackage(appName: string): Promise<boolean>;
9
+ }
10
+ //# sourceMappingURL=linuxManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linuxManager.d.ts","sourceRoot":"","sources":["../../src/managers/linuxManager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGtD,qBAAa,YAAY;IACvB,OAAO,CAAC,cAAc,CAAgD;;IAMtE,OAAO,CAAC,oBAAoB;IAmBtB,oBAAoB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAyD/C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAsGvD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAiBvD"}
@@ -0,0 +1,191 @@
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.LinuxManager = 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 LinuxManager {
13
+ constructor() {
14
+ this.packageManager = 'unknown';
15
+ this.packageManager = this.detectPackageManager();
16
+ }
17
+ detectPackageManager() {
18
+ try {
19
+ (0, child_process_1.execSync)('which apt', { stdio: 'ignore' });
20
+ return 'apt';
21
+ }
22
+ catch { }
23
+ try {
24
+ (0, child_process_1.execSync)('which dnf', { stdio: 'ignore' });
25
+ return 'dnf';
26
+ }
27
+ catch { }
28
+ try {
29
+ (0, child_process_1.execSync)('which yum', { stdio: 'ignore' });
30
+ return 'yum';
31
+ }
32
+ catch { }
33
+ return 'unknown';
34
+ }
35
+ async getInstalledPackages() {
36
+ const packages = [];
37
+ if (this.packageManager === 'unknown') {
38
+ return packages;
39
+ }
40
+ try {
41
+ let output;
42
+ if (this.packageManager === 'apt') {
43
+ output = (0, child_process_1.execSync)('apt list --installed 2>/dev/null').toString();
44
+ const lines = output.split('\n').slice(1);
45
+ for (const line of lines) {
46
+ if (!line.trim())
47
+ continue;
48
+ const parts = line.split('/');
49
+ if (parts[0]) {
50
+ packages.push({
51
+ name: parts[0].trim(),
52
+ version: 'unknown',
53
+ installMethod: 'apt',
54
+ mainPath: '',
55
+ installedDate: undefined,
56
+ });
57
+ }
58
+ }
59
+ }
60
+ else {
61
+ try {
62
+ output = (0, child_process_1.execSync)(`${this.packageManager} list installed`).toString();
63
+ const lines = output.split('\n');
64
+ for (const line of lines) {
65
+ if (!line.trim())
66
+ continue;
67
+ const parts = line.split(/\s+/);
68
+ if (parts[0]) {
69
+ packages.push({
70
+ name: parts[0].split('.')[0],
71
+ version: parts[1] || 'unknown',
72
+ installMethod: this.packageManager,
73
+ mainPath: '',
74
+ installedDate: undefined,
75
+ });
76
+ }
77
+ }
78
+ }
79
+ catch (error) {
80
+ logger_1.Logger.debug(`Failed to query ${this.packageManager}: ` + error.message);
81
+ }
82
+ }
83
+ }
84
+ catch (error) {
85
+ logger_1.Logger.debug('Failed to get system packages: ' + error.message);
86
+ }
87
+ return packages;
88
+ }
89
+ async findArtifacts(appName) {
90
+ const artifacts = [];
91
+ const home = (0, platform_1.getHomeDir)();
92
+ const binPaths = [
93
+ `/usr/bin/${appName}`,
94
+ `/usr/local/bin/${appName}`,
95
+ `${home}/.local/bin/${appName}`,
96
+ ];
97
+ for (const binPath of binPaths) {
98
+ if ((0, filesystem_1.pathExists)(binPath)) {
99
+ artifacts.push({
100
+ path: binPath,
101
+ type: 'binary',
102
+ size: 0,
103
+ description: 'Binary executable',
104
+ });
105
+ }
106
+ }
107
+ const configPaths = [
108
+ path_1.default.join(home, `.config`, appName),
109
+ path_1.default.join(home, `.${appName}rc`),
110
+ path_1.default.join(home, `.${appName}`),
111
+ `/etc/${appName}`,
112
+ `/etc/${appName}.conf`,
113
+ ];
114
+ for (const configPath of configPaths) {
115
+ if ((0, filesystem_1.pathExists)(configPath)) {
116
+ artifacts.push({
117
+ path: configPath,
118
+ type: 'config',
119
+ size: 0,
120
+ description: 'Configuration directory/file',
121
+ });
122
+ }
123
+ }
124
+ const cachePaths = [
125
+ path_1.default.join(home, `.cache`, appName),
126
+ path_1.default.join(home, `.${appName}_cache`),
127
+ ];
128
+ for (const cachePath of cachePaths) {
129
+ if ((0, filesystem_1.pathExists)(cachePath)) {
130
+ artifacts.push({
131
+ path: cachePath,
132
+ type: 'cache',
133
+ size: 0,
134
+ description: 'Cache directory',
135
+ });
136
+ }
137
+ }
138
+ const dataPath = path_1.default.join(home, `.local`, `share`, appName);
139
+ if ((0, filesystem_1.pathExists)(dataPath)) {
140
+ artifacts.push({
141
+ path: dataPath,
142
+ type: 'data',
143
+ size: 0,
144
+ description: 'Data directory',
145
+ });
146
+ }
147
+ const logPaths = [
148
+ `/var/log/${appName}`,
149
+ `/var/log/${appName}.log`,
150
+ path_1.default.join(home, `.local`, `share`, `log`, appName),
151
+ ];
152
+ for (const logPath of logPaths) {
153
+ if ((0, filesystem_1.pathExists)(logPath)) {
154
+ artifacts.push({
155
+ path: logPath,
156
+ type: 'log',
157
+ size: 0,
158
+ description: 'Log file/directory',
159
+ });
160
+ }
161
+ }
162
+ const systemdPath = `/etc/systemd/system/${appName}.service`;
163
+ if ((0, filesystem_1.pathExists)(systemdPath)) {
164
+ artifacts.push({
165
+ path: systemdPath,
166
+ type: 'service',
167
+ size: 0,
168
+ description: 'Systemd service file',
169
+ });
170
+ }
171
+ return artifacts;
172
+ }
173
+ async removePackage(appName) {
174
+ if (this.packageManager === 'unknown') {
175
+ return false;
176
+ }
177
+ try {
178
+ const command = this.packageManager === 'apt'
179
+ ? `apt-get remove -y ${appName}`
180
+ : `${this.packageManager} remove -y ${appName}`;
181
+ (0, child_process_1.execSync)(command, { stdio: 'pipe' });
182
+ return true;
183
+ }
184
+ catch (error) {
185
+ logger_1.Logger.debug(`Failed to uninstall ${appName}: ` + error.message);
186
+ return false;
187
+ }
188
+ }
189
+ }
190
+ exports.LinuxManager = LinuxManager;
191
+ //# sourceMappingURL=linuxManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linuxManager.js","sourceRoot":"","sources":["../../src/managers/linuxManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { InstalledApp, ArtifactPath } from '../types';
2
+ export declare class NpmManager {
3
+ private globalNpmPath;
4
+ constructor();
5
+ private getNpmGlobalPath;
6
+ getInstalledPackages(): Promise<InstalledApp[]>;
7
+ findArtifacts(appName: string): Promise<ArtifactPath[]>;
8
+ removePackage(appName: string): Promise<boolean>;
9
+ }
10
+ //# sourceMappingURL=npmManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npmManager.d.ts","sourceRoot":"","sources":["../../src/managers/npmManager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGtD,qBAAa,UAAU;IACrB,OAAO,CAAC,aAAa,CAAS;;IAM9B,OAAO,CAAC,gBAAgB;IAQlB,oBAAoB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAyB/C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAgFvD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CASvD"}
@@ -0,0 +1,119 @@
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 {
13
+ constructor() {
14
+ this.globalNpmPath = this.getNpmGlobalPath();
15
+ }
16
+ getNpmGlobalPath() {
17
+ try {
18
+ return (0, child_process_1.execSync)('npm config get prefix').toString().trim();
19
+ }
20
+ catch {
21
+ return path_1.default.join((0, platform_1.getHomeDir)(), '.npm-global');
22
+ }
23
+ }
24
+ async getInstalledPackages() {
25
+ const packages = [];
26
+ try {
27
+ const output = (0, child_process_1.execSync)('npm list -g --json --depth=0').toString();
28
+ const data = JSON.parse(output);
29
+ const dependencies = data.dependencies || {};
30
+ for (const [name, pkg] of Object.entries(dependencies)) {
31
+ const typedPkg = pkg;
32
+ packages.push({
33
+ name,
34
+ version: typedPkg.version || 'unknown',
35
+ installMethod: 'npm',
36
+ mainPath: path_1.default.join(this.globalNpmPath, 'lib', 'node_modules', name),
37
+ installedDate: undefined,
38
+ });
39
+ }
40
+ }
41
+ catch (error) {
42
+ logger_1.Logger.debug('Failed to get npm packages: ' + error.message);
43
+ }
44
+ return packages;
45
+ }
46
+ async findArtifacts(appName) {
47
+ 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)) {
51
+ artifacts.push({
52
+ path: packagePath,
53
+ type: 'other',
54
+ size: 0,
55
+ description: 'Package directory',
56
+ });
57
+ }
58
+ const binPath = path_1.default.join(this.globalNpmPath, 'bin', appName);
59
+ if ((0, filesystem_1.pathExists)(binPath)) {
60
+ artifacts.push({
61
+ path: binPath,
62
+ type: 'binary',
63
+ size: 0,
64
+ description: 'Executable binary',
65
+ });
66
+ }
67
+ 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),
71
+ ];
72
+ for (const configPath of configPaths) {
73
+ if ((0, filesystem_1.pathExists)(configPath)) {
74
+ artifacts.push({
75
+ path: configPath,
76
+ type: 'config',
77
+ size: 0,
78
+ description: `${appName} configuration`,
79
+ });
80
+ }
81
+ }
82
+ const cachePaths = [
83
+ path_1.default.join(home, `.cache`, appName),
84
+ path_1.default.join(home, `Library`, `Caches`, appName),
85
+ ];
86
+ for (const cachePath of cachePaths) {
87
+ if ((0, filesystem_1.pathExists)(cachePath)) {
88
+ artifacts.push({
89
+ path: cachePath,
90
+ type: 'cache',
91
+ size: 0,
92
+ description: `${appName} cache`,
93
+ });
94
+ }
95
+ }
96
+ const dataPath = path_1.default.join(home, `.local`, `share`, appName);
97
+ if ((0, filesystem_1.pathExists)(dataPath)) {
98
+ artifacts.push({
99
+ path: dataPath,
100
+ type: 'data',
101
+ size: 0,
102
+ description: `${appName} data files`,
103
+ });
104
+ }
105
+ return artifacts;
106
+ }
107
+ async removePackage(appName) {
108
+ try {
109
+ (0, child_process_1.execSync)(`npm uninstall -g ${appName}`);
110
+ return true;
111
+ }
112
+ catch (error) {
113
+ logger_1.Logger.debug('Failed to uninstall npm package: ' + error.message);
114
+ return false;
115
+ }
116
+ }
117
+ }
118
+ exports.NpmManager = NpmManager;
119
+ //# sourceMappingURL=npmManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npmManager.js","sourceRoot":"","sources":["../../src/managers/npmManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ export type Platform = 'darwin' | 'linux' | 'win32';
2
+ export type InstallMethod = 'npm' | 'yarn' | 'pnpm' | 'brew' | 'apt' | 'yum' | 'dnf' | 'custom' | 'unknown';
3
+ export interface InstalledApp {
4
+ name: string;
5
+ version: string;
6
+ installMethod: InstallMethod;
7
+ mainPath: string;
8
+ installedDate?: Date;
9
+ size?: number;
10
+ }
11
+ export interface ArtifactPath {
12
+ path: string;
13
+ type: 'binary' | 'config' | 'cache' | 'log' | 'data' | 'service' | 'other';
14
+ size: number;
15
+ description: string;
16
+ }
17
+ export interface AppAnalysis {
18
+ app: InstalledApp;
19
+ artifacts: ArtifactPath[];
20
+ totalSize: number;
21
+ dependents?: string[];
22
+ }
23
+ export interface RemovalOptions {
24
+ dryRun?: boolean;
25
+ createBackup?: boolean;
26
+ backupPath?: string;
27
+ force?: boolean;
28
+ userConsent?: boolean;
29
+ reportFormat?: 'html' | 'text';
30
+ }
31
+ export interface RemovalResult {
32
+ success: boolean;
33
+ appName: string;
34
+ removedFiles: number;
35
+ freedSpace: number;
36
+ backupPath?: string;
37
+ errors?: string[];
38
+ }
39
+ export interface SearchOptions {
40
+ query?: string;
41
+ installMethod?: InstallMethod;
42
+ sortBy?: 'name' | 'date' | 'size';
43
+ }
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpD,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,MAAM,GACN,MAAM,GACN,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,YAAY,CAAC;IAClB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACnC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export declare class GUIServer {
2
+ private port;
3
+ private server;
4
+ constructor(port?: number);
5
+ start(): Promise<void>;
6
+ stop(): Promise<void>;
7
+ private handleAPIRequest;
8
+ private getIndexHTML;
9
+ }
10
+ //# sourceMappingURL=guiServer.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,134 @@
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 {
7
+ constructor(port = 3000) {
8
+ this.port = 3000;
9
+ this.port = port;
10
+ }
11
+ 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
+ }
25
+ });
26
+ this.server.listen(this.port, () => {
27
+ logger_1.Logger.success(`GUI server running at http://localhost:${this.port}`);
28
+ });
29
+ }
30
+ async stop() {
31
+ if (this.server) {
32
+ this.server.close();
33
+ logger_1.Logger.info('GUI server stopped');
34
+ }
35
+ }
36
+ handleAPIRequest(req, res) {
37
+ res.writeHead(200, { 'Content-Type': 'application/json' });
38
+ res.end(JSON.stringify({ message: 'API endpoint' }));
39
+ }
40
+ getIndexHTML() {
41
+ return `
42
+ <!DOCTYPE html>
43
+ <html lang="en">
44
+ <head>
45
+ <meta charset="UTF-8">
46
+ <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;
89
+ }
90
+ p {
91
+ color: #666;
92
+ line-height: 1.6;
93
+ margin-bottom: 20px;
94
+ }
95
+ .coming-soon {
96
+ background: #f0f4ff;
97
+ border-left: 4px solid #667eea;
98
+ padding: 20px;
99
+ border-radius: 4px;
100
+ margin-top: 30px;
101
+ }
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
+ `;
131
+ }
132
+ }
133
+ exports.GUIServer = GUIServer;
134
+ //# sourceMappingURL=guiServer.js.map
@@ -0,0 +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"}
@@ -0,0 +1,6 @@
1
+ export type MainMenuAction = 'search' | 'browse' | 'list-all' | 'help' | 'exit';
2
+ export declare function showMainMenu(): Promise<MainMenuAction>;
3
+ export declare function showAppMenu(): Promise<'remove' | 'details' | 'back'>;
4
+ export declare function showHeader(): void;
5
+ export declare function showHelp(): void;
6
+ //# sourceMappingURL=menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/ui/menu.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,MAAM,GACN,MAAM,CAAC;AAEX,wBAAsB,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,CAgB5D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC,CAe1E;AAED,wBAAgB,UAAU,IAAI,IAAI,CAYjC;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAwC/B"}