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,127 @@
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.ScheduledCleanup = void 0;
7
+ const platform_1 = require("../utils/platform");
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const logger_1 = require("../utils/logger");
11
+ class ScheduledCleanup {
12
+ constructor() {
13
+ this.schedules = new Map();
14
+ const home = (0, platform_1.getHomeDir)();
15
+ this.schedulesFile = path_1.default.join(home, '.appclean-schedules.json');
16
+ this.loadSchedules();
17
+ }
18
+ createSchedule(appName, frequency, options) {
19
+ const id = `schedule-${Date.now()}`;
20
+ const schedule = {
21
+ id,
22
+ appName,
23
+ frequency,
24
+ enabled: true,
25
+ dryRun: options?.dryRun ?? false,
26
+ createBackup: options?.createBackup ?? true,
27
+ ...options,
28
+ };
29
+ this.schedules.set(id, schedule);
30
+ this.saveSchedules();
31
+ logger_1.Logger.info(`Cleanup schedule created: ${id} for ${appName} (${frequency})`);
32
+ return schedule;
33
+ }
34
+ deleteSchedule(scheduleId) {
35
+ const deleted = this.schedules.delete(scheduleId);
36
+ if (deleted) {
37
+ this.saveSchedules();
38
+ logger_1.Logger.info(`Cleanup schedule deleted: ${scheduleId}`);
39
+ }
40
+ return deleted;
41
+ }
42
+ getSchedules() {
43
+ return Array.from(this.schedules.values());
44
+ }
45
+ getSchedule(scheduleId) {
46
+ return this.schedules.get(scheduleId) || null;
47
+ }
48
+ updateSchedule(scheduleId, updates) {
49
+ const schedule = this.schedules.get(scheduleId);
50
+ if (schedule) {
51
+ Object.assign(schedule, updates);
52
+ this.saveSchedules();
53
+ logger_1.Logger.info(`Cleanup schedule updated: ${scheduleId}`);
54
+ return true;
55
+ }
56
+ return false;
57
+ }
58
+ setScheduleEnabled(scheduleId, enabled) {
59
+ const schedule = this.schedules.get(scheduleId);
60
+ if (schedule) {
61
+ schedule.enabled = enabled;
62
+ this.saveSchedules();
63
+ logger_1.Logger.info(`Cleanup schedule ${scheduleId} ${enabled ? 'enabled' : 'disabled'}`);
64
+ }
65
+ }
66
+ calculateNextRun(schedule) {
67
+ const now = new Date();
68
+ switch (schedule.frequency) {
69
+ case 'daily':
70
+ return new Date(now.getTime() + 24 * 60 * 60 * 1000);
71
+ case 'weekly':
72
+ return new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000);
73
+ case 'monthly':
74
+ return new Date(now.getTime() + 30 * 24 * 60 * 60 * 1000);
75
+ case 'custom':
76
+ return new Date(now.getTime() + 24 * 60 * 60 * 1000);
77
+ default:
78
+ return now;
79
+ }
80
+ }
81
+ getSchedulesDue() {
82
+ const now = new Date();
83
+ return this.getSchedules().filter((schedule) => {
84
+ if (!schedule.enabled)
85
+ return false;
86
+ if (!schedule.nextRun)
87
+ return true;
88
+ return schedule.nextRun <= now;
89
+ });
90
+ }
91
+ recordResult(result) {
92
+ const home = (0, platform_1.getHomeDir)();
93
+ const resultsDir = path_1.default.join(home, '.appclean-cleanup-results');
94
+ if (!fs_1.default.existsSync(resultsDir)) {
95
+ fs_1.default.mkdirSync(resultsDir, { recursive: true });
96
+ }
97
+ const filename = `${result.scheduleId}-${result.timestamp.getTime()}.json`;
98
+ const filepath = path_1.default.join(resultsDir, filename);
99
+ fs_1.default.writeFileSync(filepath, JSON.stringify(result, null, 2), 'utf-8');
100
+ logger_1.Logger.debug(`Cleanup result recorded: ${filepath}`);
101
+ }
102
+ loadSchedules() {
103
+ try {
104
+ if (fs_1.default.existsSync(this.schedulesFile)) {
105
+ const content = fs_1.default.readFileSync(this.schedulesFile, 'utf-8');
106
+ const data = JSON.parse(content);
107
+ for (const schedule of data) {
108
+ this.schedules.set(schedule.id, schedule);
109
+ }
110
+ }
111
+ }
112
+ catch (error) {
113
+ logger_1.Logger.debug(`Failed to load schedules: ${error.message}`);
114
+ }
115
+ }
116
+ saveSchedules() {
117
+ try {
118
+ const data = Array.from(this.schedules.values());
119
+ fs_1.default.writeFileSync(this.schedulesFile, JSON.stringify(data, null, 2), 'utf-8');
120
+ }
121
+ catch (error) {
122
+ logger_1.Logger.error(`Failed to save schedules: ${error.message}`);
123
+ }
124
+ }
125
+ }
126
+ exports.ScheduledCleanup = ScheduledCleanup;
127
+ //# sourceMappingURL=scheduledCleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduledCleanup.js","sourceRoot":"","sources":["../../src/core/scheduledCleanup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { ArtifactPath } from '../types';
2
+ export interface ServiceFile {
3
+ path: string;
4
+ type: 'launchagent' | 'launchdaemon' | 'systemd' | 'service';
5
+ appName: string;
6
+ requiresManualCleanup: boolean;
7
+ dependencies?: string[];
8
+ manualCleanupInstructions: string;
9
+ }
10
+ export declare class ServiceFileDetector {
11
+ findServiceFiles(appName: string): Promise<ServiceFile[]>;
12
+ private findMacOSServiceFiles;
13
+ private findLinuxServiceFiles;
14
+ private checkDependencies;
15
+ convertToArtifacts(serviceFiles: ServiceFile[]): ArtifactPath[];
16
+ getManualCleanupInstructions(serviceFiles: ServiceFile[]): string;
17
+ }
18
+ //# sourceMappingURL=serviceFileDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceFileDetector.d.ts","sourceRoot":"","sources":["../../src/core/serviceFileDetector.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,qBAAa,mBAAmB;IAIxB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAiBjD,qBAAqB;YA8CrB,qBAAqB;IAkDnC,OAAO,CAAC,iBAAiB;IAmBzB,kBAAkB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE;IAY/D,4BAA4B,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM;CAkBlE"}
@@ -0,0 +1,136 @@
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.ServiceFileDetector = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const platform_1 = require("../utils/platform");
9
+ const filesystem_1 = require("../utils/filesystem");
10
+ class ServiceFileDetector {
11
+ async findServiceFiles(appName) {
12
+ const serviceFiles = [];
13
+ if ((0, platform_1.isMacOS)()) {
14
+ serviceFiles.push(...(await this.findMacOSServiceFiles(appName)));
15
+ }
16
+ if ((0, platform_1.isLinux)()) {
17
+ serviceFiles.push(...(await this.findLinuxServiceFiles(appName)));
18
+ }
19
+ return serviceFiles;
20
+ }
21
+ async findMacOSServiceFiles(appName) {
22
+ const home = (0, platform_1.getHomeDir)();
23
+ const serviceFiles = [];
24
+ const launchAgentsPath = path_1.default.join(home, 'Library', 'LaunchAgents');
25
+ if ((0, filesystem_1.pathExists)(launchAgentsPath)) {
26
+ const agents = (0, filesystem_1.listDirectory)(launchAgentsPath);
27
+ for (const agent of agents) {
28
+ if (agent.toLowerCase().includes(appName.toLowerCase())) {
29
+ const fullPath = path_1.default.join(launchAgentsPath, agent);
30
+ serviceFiles.push({
31
+ path: fullPath,
32
+ type: 'launchagent',
33
+ appName,
34
+ requiresManualCleanup: this.checkDependencies(fullPath, appName),
35
+ manualCleanupInstructions: `To manually remove: rm "${fullPath}"`,
36
+ });
37
+ }
38
+ }
39
+ }
40
+ const launchDaemonsPath = path_1.default.join(home, 'Library', 'LaunchDaemons');
41
+ if ((0, filesystem_1.pathExists)(launchDaemonsPath)) {
42
+ const daemons = (0, filesystem_1.listDirectory)(launchDaemonsPath);
43
+ for (const daemon of daemons) {
44
+ if (daemon.toLowerCase().includes(appName.toLowerCase())) {
45
+ const fullPath = path_1.default.join(launchDaemonsPath, daemon);
46
+ serviceFiles.push({
47
+ path: fullPath,
48
+ type: 'launchdaemon',
49
+ appName,
50
+ requiresManualCleanup: true,
51
+ manualCleanupInstructions: `To manually remove: sudo rm "${fullPath}" && sudo launchctl unload "${fullPath}"`,
52
+ });
53
+ }
54
+ }
55
+ }
56
+ return serviceFiles;
57
+ }
58
+ async findLinuxServiceFiles(appName) {
59
+ const home = (0, platform_1.getHomeDir)();
60
+ const serviceFiles = [];
61
+ const userSystemdPath = path_1.default.join(home, '.config', 'systemd', 'user');
62
+ if ((0, filesystem_1.pathExists)(userSystemdPath)) {
63
+ const services = (0, filesystem_1.listDirectory)(userSystemdPath);
64
+ for (const service of services) {
65
+ if (service.includes(appName)) {
66
+ const fullPath = path_1.default.join(userSystemdPath, service);
67
+ serviceFiles.push({
68
+ path: fullPath,
69
+ type: 'systemd',
70
+ appName,
71
+ requiresManualCleanup: this.checkDependencies(fullPath, appName),
72
+ manualCleanupInstructions: `To manually remove: systemctl --user stop ${service} && rm "${fullPath}" && systemctl --user daemon-reload`,
73
+ });
74
+ }
75
+ }
76
+ }
77
+ const systemServicePath = '/etc/systemd/system';
78
+ if ((0, filesystem_1.pathExists)(systemServicePath)) {
79
+ try {
80
+ const services = (0, filesystem_1.listDirectory)(systemServicePath);
81
+ for (const service of services) {
82
+ if (service.includes(appName)) {
83
+ const fullPath = path_1.default.join(systemServicePath, service);
84
+ serviceFiles.push({
85
+ path: fullPath,
86
+ type: 'service',
87
+ appName,
88
+ requiresManualCleanup: true,
89
+ manualCleanupInstructions: `To manually remove: sudo systemctl stop ${service} && sudo rm "${fullPath}" && sudo systemctl daemon-reload`,
90
+ });
91
+ }
92
+ }
93
+ }
94
+ catch {
95
+ }
96
+ }
97
+ return serviceFiles;
98
+ }
99
+ checkDependencies(filePath, appName) {
100
+ try {
101
+ const content = (0, filesystem_1.readFile)(filePath);
102
+ if (!content)
103
+ return false;
104
+ return (content.includes('KeepAlive') ||
105
+ content.includes('RunAtLoad') ||
106
+ content.includes('StartCalendarInterval'));
107
+ }
108
+ catch {
109
+ return false;
110
+ }
111
+ }
112
+ convertToArtifacts(serviceFiles) {
113
+ return serviceFiles.map((file) => ({
114
+ path: file.path,
115
+ type: 'service',
116
+ size: 0,
117
+ description: `${file.type} service file (requires manual cleanup)`,
118
+ }));
119
+ }
120
+ getManualCleanupInstructions(serviceFiles) {
121
+ if (serviceFiles.length === 0) {
122
+ return '';
123
+ }
124
+ let instructions = '\nāš ļø Manual Cleanup Required:\n\n';
125
+ instructions += 'The following service files require manual cleanup:\n\n';
126
+ serviceFiles.forEach((file, index) => {
127
+ instructions += `${index + 1}. ${file.type.toUpperCase()}\n`;
128
+ instructions += ` Path: ${file.path}\n`;
129
+ instructions += ` Command: ${file.manualCleanupInstructions}\n\n`;
130
+ });
131
+ instructions += 'Run these commands in your terminal to complete the cleanup.\n';
132
+ return instructions;
133
+ }
134
+ }
135
+ exports.ServiceFileDetector = ServiceFileDetector;
136
+ //# sourceMappingURL=serviceFileDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceFileDetector.js","sourceRoot":"","sources":["../../src/core/serviceFileDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type VerificationStatus = 'verified_removed' | 'still_exists' | 'partial_removal' | 'unknown';
2
+ export interface VerificationResult {
3
+ status: VerificationStatus;
4
+ remainingPaths: string[];
5
+ commandOutput: string;
6
+ timestamp: Date;
7
+ }
8
+ export declare class VerificationModule {
9
+ verifyRemoval(appName: string, artifactPaths: string[]): Promise<VerificationResult>;
10
+ private verifyViaCommand;
11
+ getStatusMessage(status: VerificationStatus): string;
12
+ getDetailedReport(result: VerificationResult): string;
13
+ }
14
+ //# sourceMappingURL=verificationModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verificationModule.d.ts","sourceRoot":"","sources":["../../src/core/verificationModule.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,GAAG,cAAc,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAErG,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,qBAAa,kBAAkB;IAIvB,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,kBAAkB,CAAC;YAsChB,gBAAgB;IA+C9B,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM;IAcpD,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM;CAoBtD"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VerificationModule = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const platform_1 = require("../utils/platform");
6
+ const filesystem_1 = require("../utils/filesystem");
7
+ class VerificationModule {
8
+ async verifyRemoval(appName, artifactPaths) {
9
+ const result = {
10
+ status: 'unknown',
11
+ remainingPaths: [],
12
+ commandOutput: '',
13
+ timestamp: new Date(),
14
+ };
15
+ try {
16
+ const remainingPaths = artifactPaths.filter((path) => (0, filesystem_1.pathExists)(path));
17
+ result.remainingPaths = remainingPaths;
18
+ const commandStatus = await this.verifyViaCommand(appName);
19
+ result.commandOutput = commandStatus;
20
+ if (remainingPaths.length === 0 && !commandStatus) {
21
+ result.status = 'verified_removed';
22
+ }
23
+ else if (remainingPaths.length === 0 && commandStatus) {
24
+ result.status = 'unknown';
25
+ }
26
+ else if (remainingPaths.length > 0 && remainingPaths.length < artifactPaths.length) {
27
+ result.status = 'partial_removal';
28
+ }
29
+ else if (remainingPaths.length === artifactPaths.length) {
30
+ result.status = 'still_exists';
31
+ }
32
+ }
33
+ catch (error) {
34
+ result.status = 'unknown';
35
+ result.commandOutput = error.message;
36
+ }
37
+ return result;
38
+ }
39
+ async verifyViaCommand(appName) {
40
+ try {
41
+ if ((0, platform_1.isMacOS)() || (0, platform_1.isLinux)()) {
42
+ try {
43
+ const output = (0, child_process_1.execSync)(`which ${appName} 2>/dev/null || true`).toString().trim();
44
+ if (output) {
45
+ return `Found at: ${output}`;
46
+ }
47
+ }
48
+ catch {
49
+ }
50
+ try {
51
+ (0, child_process_1.execSync)(`${appName} --version 2>/dev/null || true`).toString().trim();
52
+ return `App still responds to --version`;
53
+ }
54
+ catch {
55
+ }
56
+ return '';
57
+ }
58
+ if ((0, platform_1.isWindows)()) {
59
+ try {
60
+ const output = (0, child_process_1.execSync)(`where ${appName} 2>nul || echo ""`).toString().trim();
61
+ if (output && output !== '""') {
62
+ return `Found at: ${output}`;
63
+ }
64
+ }
65
+ catch {
66
+ }
67
+ return '';
68
+ }
69
+ return '';
70
+ }
71
+ catch {
72
+ return '';
73
+ }
74
+ }
75
+ getStatusMessage(status) {
76
+ const messages = {
77
+ verified_removed: 'āœ“ Application successfully removed',
78
+ still_exists: 'āœ— Application still exists on system',
79
+ partial_removal: '⚠ Application partially removed (some files remain)',
80
+ unknown: '? Verification status unknown',
81
+ };
82
+ return messages[status] || messages['unknown'];
83
+ }
84
+ getDetailedReport(result) {
85
+ let report = `\nšŸ“‹ Verification Report\n`;
86
+ report += `${'─'.repeat(40)}\n`;
87
+ report += `Status: ${this.getStatusMessage(result.status)}\n`;
88
+ if (result.remainingPaths.length > 0) {
89
+ report += `\nRemaining Files/Folders:\n`;
90
+ result.remainingPaths.forEach((path) => {
91
+ report += ` - ${path}\n`;
92
+ });
93
+ }
94
+ if (result.commandOutput) {
95
+ report += `\nCommand Output: ${result.commandOutput}\n`;
96
+ }
97
+ report += `Verified at: ${result.timestamp.toISOString()}\n`;
98
+ return report;
99
+ }
100
+ }
101
+ exports.VerificationModule = VerificationModule;
102
+ //# sourceMappingURL=verificationModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verificationModule.js","sourceRoot":"","sources":["../../src/core/verificationModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}