appclean 1.9.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/npm-publish.yml +61 -0
- package/DEVELOPMENT.md +84 -0
- package/GUI_IMPLEMENTATION_STATUS.md +143 -0
- package/MD_Files/INDEX.md +51 -0
- package/PHASE2_COMPLETION.md +281 -0
- package/PHASE3_COMPLETION.md +364 -0
- package/README.md +411 -91
- package/RELEASE_GUIDE.md +236 -0
- package/assets/logo.svg +34 -0
- package/dist/core/appUpdateChecker.js +12 -16
- package/dist/core/appUpdateChecker.js.map +1 -1
- package/dist/core/detector.js +14 -18
- package/dist/core/detector.js.map +1 -1
- package/dist/core/duplicateFileFinder.js +12 -19
- package/dist/core/duplicateFileFinder.js.map +1 -1
- package/dist/core/orphanedDependencyDetector.js +19 -26
- package/dist/core/orphanedDependencyDetector.js.map +1 -1
- package/dist/core/performanceOptimizer.js +6 -10
- package/dist/core/performanceOptimizer.js.map +1 -1
- package/dist/core/permissionHandler.js +21 -25
- package/dist/core/permissionHandler.js.map +1 -1
- package/dist/core/pluginSystem.js +9 -13
- package/dist/core/pluginSystem.js.map +1 -1
- package/dist/core/removalRecorder.js +12 -19
- package/dist/core/removalRecorder.js.map +1 -1
- package/dist/core/remover.js +59 -66
- package/dist/core/remover.js.map +1 -1
- package/dist/core/reportGenerator.d.ts +1 -1
- package/dist/core/reportGenerator.d.ts.map +1 -1
- package/dist/core/reportGenerator.js +27 -34
- package/dist/core/reportGenerator.js.map +1 -1
- package/dist/core/scheduledCleanup.js +23 -30
- package/dist/core/scheduledCleanup.js.map +1 -1
- package/dist/core/serviceFileDetector.js +24 -31
- package/dist/core/serviceFileDetector.js.map +1 -1
- package/dist/core/verificationModule.js +10 -14
- package/dist/core/verificationModule.js.map +1 -1
- package/dist/index.js +118 -156
- package/dist/index.js.map +1 -1
- package/dist/managers/brewManager.js +30 -37
- package/dist/managers/brewManager.js.map +1 -1
- package/dist/managers/customManager.js +23 -30
- package/dist/managers/customManager.js.map +1 -1
- package/dist/managers/linuxManager.js +29 -36
- package/dist/managers/linuxManager.js.map +1 -1
- package/dist/managers/npmManager.js +27 -34
- package/dist/managers/npmManager.js.map +1 -1
- package/dist/types/index.js +1 -2
- package/dist/ui/client/api/client.d.ts +24 -0
- package/dist/ui/client/api/client.d.ts.map +1 -0
- package/dist/ui/client/api/client.js +100 -0
- package/dist/ui/client/api/client.js.map +1 -0
- package/dist/ui/client/app.d.ts +7 -0
- package/dist/ui/client/app.d.ts.map +1 -0
- package/dist/ui/client/app.js +75 -0
- package/dist/ui/client/app.js.map +1 -0
- package/dist/ui/client/index.html +107 -0
- package/dist/ui/client/pages/appDetails.d.ts +8 -0
- package/dist/ui/client/pages/appDetails.d.ts.map +1 -0
- package/dist/ui/client/pages/appDetails.js +287 -0
- package/dist/ui/client/pages/appDetails.js.map +1 -0
- package/dist/ui/client/pages/appSearch.d.ts +2 -0
- package/dist/ui/client/pages/appSearch.d.ts.map +1 -0
- package/dist/ui/client/pages/appSearch.js +221 -0
- package/dist/ui/client/pages/appSearch.js.map +1 -0
- package/dist/ui/client/pages/dashboard.d.ts +2 -0
- package/dist/ui/client/pages/dashboard.d.ts.map +1 -0
- package/dist/ui/client/pages/dashboard.js +175 -0
- package/dist/ui/client/pages/dashboard.js.map +1 -0
- package/dist/ui/client/pages/settings.d.ts +7 -0
- package/dist/ui/client/pages/settings.d.ts.map +1 -0
- package/dist/ui/client/pages/settings.js +279 -0
- package/dist/ui/client/pages/settings.js.map +1 -0
- package/dist/ui/client/state/appStore.d.ts +38 -0
- package/dist/ui/client/state/appStore.d.ts.map +1 -0
- package/dist/ui/client/state/appStore.js +130 -0
- package/dist/ui/client/state/appStore.js.map +1 -0
- package/dist/ui/client/state/dashboardStore.d.ts +31 -0
- package/dist/ui/client/state/dashboardStore.d.ts.map +1 -0
- package/dist/ui/client/state/dashboardStore.js +76 -0
- package/dist/ui/client/state/dashboardStore.js.map +1 -0
- package/dist/ui/client/state/uiStore.d.ts +43 -0
- package/dist/ui/client/state/uiStore.d.ts.map +1 -0
- package/dist/ui/client/state/uiStore.js +109 -0
- package/dist/ui/client/state/uiStore.js.map +1 -0
- package/dist/ui/client/styles/animations.css +349 -0
- package/dist/ui/client/styles/base.css +214 -0
- package/dist/ui/client/styles/components.css +400 -0
- package/dist/ui/client/styles/layout.css +224 -0
- package/dist/ui/client/styles/variables.css +140 -0
- package/dist/ui/client/utils/events.d.ts +19 -0
- package/dist/ui/client/utils/events.d.ts.map +1 -0
- package/dist/ui/client/utils/events.js +54 -0
- package/dist/ui/client/utils/events.js.map +1 -0
- package/dist/ui/client/utils/formatting.d.ts +11 -0
- package/dist/ui/client/utils/formatting.d.ts.map +1 -0
- package/dist/ui/client/utils/formatting.js +104 -0
- package/dist/ui/client/utils/formatting.js.map +1 -0
- package/dist/ui/client/utils/router.d.ts +25 -0
- package/dist/ui/client/utils/router.d.ts.map +1 -0
- package/dist/ui/client/utils/router.js +90 -0
- package/dist/ui/client/utils/router.js.map +1 -0
- package/dist/ui/guiServer.d.ts +11 -5
- package/dist/ui/guiServer.d.ts.map +1 -1
- package/dist/ui/guiServer.js +180 -501
- package/dist/ui/guiServer.js.map +1 -1
- package/dist/ui/menu.js +18 -27
- package/dist/ui/menu.js.map +1 -1
- package/dist/ui/prompts.js +34 -47
- package/dist/ui/prompts.js.map +1 -1
- package/dist/ui/server/middleware/errorHandler.d.ts +19 -0
- package/dist/ui/server/middleware/errorHandler.d.ts.map +1 -0
- package/dist/ui/server/middleware/errorHandler.js +100 -0
- package/dist/ui/server/middleware/errorHandler.js.map +1 -0
- package/dist/ui/server/routes/apps.d.ts +8 -0
- package/dist/ui/server/routes/apps.d.ts.map +1 -0
- package/dist/ui/server/routes/apps.js +74 -0
- package/dist/ui/server/routes/apps.js.map +1 -0
- package/dist/ui/server/routes/dashboard.d.ts +4 -0
- package/dist/ui/server/routes/dashboard.d.ts.map +1 -0
- package/dist/ui/server/routes/dashboard.js +57 -0
- package/dist/ui/server/routes/dashboard.js.map +1 -0
- package/dist/ui/server/routes/settings.d.ts +6 -0
- package/dist/ui/server/routes/settings.d.ts.map +1 -0
- package/dist/ui/server/routes/settings.js +31 -0
- package/dist/ui/server/routes/settings.js.map +1 -0
- package/dist/ui/server/services/appService.d.ts +45 -0
- package/dist/ui/server/services/appService.d.ts.map +1 -0
- package/dist/ui/server/services/appService.js +114 -0
- package/dist/ui/server/services/appService.js.map +1 -0
- package/dist/ui/server/services/removalService.d.ts +24 -0
- package/dist/ui/server/services/removalService.d.ts.map +1 -0
- package/dist/ui/server/services/removalService.js +83 -0
- package/dist/ui/server/services/removalService.js.map +1 -0
- package/dist/utils/filesystem.js +32 -49
- package/dist/utils/filesystem.js.map +1 -1
- package/dist/utils/logger.js +9 -18
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/platform.js +10 -22
- package/dist/utils/platform.js.map +1 -1
- package/dist/utils/upgrade.d.ts +2 -1
- package/dist/utils/upgrade.d.ts.map +1 -1
- package/dist/utils/upgrade.js +24 -15
- package/dist/utils/upgrade.js.map +1 -1
- package/package.json +4 -2
- package/scripts/publish-npm.sh +64 -0
- package/src/core/appUpdateChecker.ts +1 -1
- package/src/core/detector.ts +6 -6
- package/src/core/duplicateFileFinder.ts +1 -1
- package/src/core/orphanedDependencyDetector.ts +2 -2
- package/src/core/performanceOptimizer.ts +1 -1
- package/src/core/permissionHandler.ts +2 -2
- package/src/core/pluginSystem.ts +1 -1
- package/src/core/removalRecorder.ts +2 -2
- package/src/core/remover.ts +11 -11
- package/src/core/reportGenerator.ts +2 -2
- package/src/core/scheduledCleanup.ts +2 -2
- package/src/core/serviceFileDetector.ts +2 -2
- package/src/core/verificationModule.ts +2 -2
- package/src/index.ts +8 -8
- package/src/managers/brewManager.ts +3 -3
- package/src/managers/customManager.ts +2 -2
- package/src/managers/linuxManager.ts +3 -3
- package/src/managers/npmManager.ts +3 -3
- package/src/ui/client/api/client.ts +168 -0
- package/src/ui/client/app.ts +125 -0
- package/src/ui/client/index.html +107 -0
- package/src/ui/client/pages/appDetails.ts +356 -0
- package/src/ui/client/pages/appSearch.ts +283 -0
- package/src/ui/client/pages/dashboard.ts +211 -0
- package/src/ui/client/pages/settings.ts +342 -0
- package/src/ui/client/state/appStore.ts +181 -0
- package/src/ui/client/state/dashboardStore.ts +123 -0
- package/src/ui/client/state/uiStore.ts +166 -0
- package/src/ui/client/styles/animations.css +349 -0
- package/src/ui/client/styles/base.css +214 -0
- package/src/ui/client/styles/components.css +400 -0
- package/src/ui/client/styles/layout.css +224 -0
- package/src/ui/client/styles/variables.css +140 -0
- package/src/ui/client/utils/events.ts +74 -0
- package/src/ui/client/utils/formatting.ts +157 -0
- package/src/ui/client/utils/router.ts +161 -0
- package/src/ui/guiServer.ts +245 -498
- package/src/ui/prompts.ts +1 -1
- package/src/ui/server/middleware/errorHandler.ts +174 -0
- package/src/ui/server/routes/apps.ts +132 -0
- package/src/ui/server/routes/dashboard.ts +93 -0
- package/src/ui/server/routes/settings.ts +63 -0
- package/src/ui/server/services/appService.ts +184 -0
- package/src/ui/server/services/removalService.ts +138 -0
- package/src/utils/upgrade.ts +19 -2
- package/tsconfig.json +3 -2
- package/INDEX.md +0 -165
- /package/{ACTION_CHECKLIST.md → MD_Files/ACTION_CHECKLIST.md} +0 -0
- /package/{APPCLEAN_SUMMARY.md → MD_Files/APPCLEAN_SUMMARY.md} +0 -0
- /package/{CHANGELOG.md → MD_Files/CHANGELOG.md} +0 -0
- /package/{CODE_OF_CONDUCT.md → MD_Files/CODE_OF_CONDUCT.md} +0 -0
- /package/{CODE_REVIEW_REPORT.md → MD_Files/CODE_REVIEW_REPORT.md} +0 -0
- /package/{COMMUNITY_POSTS.md → MD_Files/COMMUNITY_POSTS.md} +0 -0
- /package/{DEPLOYMENT_GUIDE.md → MD_Files/DEPLOYMENT_GUIDE.md} +0 -0
- /package/{DEPLOYMENT_STATUS.md → MD_Files/DEPLOYMENT_STATUS.md} +0 -0
- /package/{EXECUTIVE_REPORT.md → MD_Files/EXECUTIVE_REPORT.md} +0 -0
- /package/{GITHUB_OPTIMIZATION.md → MD_Files/GITHUB_OPTIMIZATION.md} +0 -0
- /package/{MARKETING_SUMMARY.md → MD_Files/MARKETING_SUMMARY.md} +0 -0
- /package/{NPM_PACKAGE_OPTIMIZATION.md → MD_Files/NPM_PACKAGE_OPTIMIZATION.md} +0 -0
- /package/{NPM_PUBLISH.md → MD_Files/NPM_PUBLISH.md} +0 -0
- /package/{PROJECT_SUMMARY.txt → MD_Files/PROJECT_SUMMARY.txt} +0 -0
- /package/{PUBLICATION_SUCCESS_REPORT.md → MD_Files/PUBLICATION_SUCCESS_REPORT.md} +0 -0
- /package/{QUICKSTART.md → MD_Files/QUICKSTART.md} +0 -0
- /package/{SETUP_GITHUB.md → MD_Files/SETUP_GITHUB.md} +0 -0
- /package/{TESTING_SUMMARY.md → MD_Files/TESTING_SUMMARY.md} +0 -0
- /package/{setup-github.sh → MD_Files/setup-github.sh} +0 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RemovalService - Wraps Remover to provide safe app removal
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { Remover } from '../../../core/remover.js';
|
|
6
|
+
import { Detector } from '../../../core/detector.js';
|
|
7
|
+
import { Logger } from '../../../utils/logger.js';
|
|
8
|
+
|
|
9
|
+
export interface RemovalOptions {
|
|
10
|
+
dryRun?: boolean;
|
|
11
|
+
createBackup?: boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface RemovalResult {
|
|
15
|
+
success: boolean;
|
|
16
|
+
appName: string;
|
|
17
|
+
removedFiles: number;
|
|
18
|
+
freedSpace: number;
|
|
19
|
+
backupPath?: string;
|
|
20
|
+
errors?: string[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class RemovalService {
|
|
24
|
+
private remover: Remover;
|
|
25
|
+
private detector: Detector;
|
|
26
|
+
private sessionRemovals: RemovalResult[] = [];
|
|
27
|
+
|
|
28
|
+
constructor() {
|
|
29
|
+
this.remover = new Remover();
|
|
30
|
+
this.detector = new Detector();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Execute app removal
|
|
35
|
+
*/
|
|
36
|
+
async removeApp(appName: string, options: RemovalOptions = {}): Promise<RemovalResult> {
|
|
37
|
+
try {
|
|
38
|
+
// Find the app
|
|
39
|
+
const allApps = await this.detector.searchApps({ query: appName });
|
|
40
|
+
const app = allApps.find((a) => a.name.toLowerCase() === appName.toLowerCase());
|
|
41
|
+
|
|
42
|
+
if (!app) {
|
|
43
|
+
throw new Error(`App "${appName}" not found`);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Find artifacts
|
|
47
|
+
const artifacts = await this.detector.findArtifacts(app.name, app.installMethod);
|
|
48
|
+
|
|
49
|
+
if (artifacts.length === 0) {
|
|
50
|
+
return {
|
|
51
|
+
success: true,
|
|
52
|
+
appName: app.name,
|
|
53
|
+
removedFiles: 0,
|
|
54
|
+
freedSpace: 0,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Calculate freed space
|
|
59
|
+
const freedSpace = artifacts.reduce((sum, a) => sum + (a.size || 0), 0);
|
|
60
|
+
|
|
61
|
+
// Handle dry-run
|
|
62
|
+
if (options.dryRun) {
|
|
63
|
+
Logger.info(`[DRY RUN] Would remove ${artifacts.length} artifacts (${this.formatBytes(freedSpace)}) for ${appName}`);
|
|
64
|
+
return {
|
|
65
|
+
success: true,
|
|
66
|
+
appName: app.name,
|
|
67
|
+
removedFiles: artifacts.length,
|
|
68
|
+
freedSpace,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Create backup if requested
|
|
73
|
+
let backupPath: string | undefined;
|
|
74
|
+
if (options.createBackup) {
|
|
75
|
+
try {
|
|
76
|
+
backupPath = await this.remover.createBackup(app.name, artifacts);
|
|
77
|
+
Logger.info(`Created backup at: ${backupPath}`);
|
|
78
|
+
} catch (error) {
|
|
79
|
+
Logger.warn(`Failed to create backup: ${(error as Error).message}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Remove artifacts using Remover class
|
|
84
|
+
const removalResult = await this.remover.removeArtifacts(artifacts, { dryRun: false });
|
|
85
|
+
|
|
86
|
+
const result: RemovalResult = {
|
|
87
|
+
success: removalResult.failed === 0,
|
|
88
|
+
appName: app.name,
|
|
89
|
+
removedFiles: removalResult.success,
|
|
90
|
+
freedSpace,
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
if (backupPath) {
|
|
94
|
+
result.backupPath = backupPath;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (removalResult.errors.length > 0) {
|
|
98
|
+
result.errors = removalResult.errors;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Track removal for dashboard
|
|
102
|
+
this.sessionRemovals.push(result);
|
|
103
|
+
|
|
104
|
+
Logger.success(`Successfully removed ${app.name} (freed ${this.formatBytes(freedSpace)})`);
|
|
105
|
+
return result;
|
|
106
|
+
} catch (error) {
|
|
107
|
+
throw new Error(`Removal failed: ${(error as Error).message}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Get session removals for dashboard
|
|
113
|
+
*/
|
|
114
|
+
getSessionRemovals(): RemovalResult[] {
|
|
115
|
+
return this.sessionRemovals;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Clear session removals
|
|
120
|
+
*/
|
|
121
|
+
clearSessionRemovals(): void {
|
|
122
|
+
this.sessionRemovals = [];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Format bytes to human readable
|
|
127
|
+
*/
|
|
128
|
+
private formatBytes(bytes: number): string {
|
|
129
|
+
if (bytes === 0) return '0 Bytes';
|
|
130
|
+
const k = 1024;
|
|
131
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB'];
|
|
132
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
133
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Export singleton
|
|
138
|
+
export const removalService = new RemovalService();
|
package/src/utils/upgrade.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { execSync } from 'child_process';
|
|
2
|
-
import { Logger } from './logger';
|
|
2
|
+
import { Logger } from './logger.js';
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { dirname, join } from 'path';
|
|
3
6
|
|
|
4
7
|
export interface VersionInfo {
|
|
5
8
|
current: string;
|
|
@@ -9,7 +12,21 @@ export interface VersionInfo {
|
|
|
9
12
|
|
|
10
13
|
export class UpgradeManager {
|
|
11
14
|
private readonly packageName = 'appclean';
|
|
12
|
-
private
|
|
15
|
+
private currentVersion: string;
|
|
16
|
+
|
|
17
|
+
constructor() {
|
|
18
|
+
// Dynamically read version from package.json
|
|
19
|
+
try {
|
|
20
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
21
|
+
const __dirname = dirname(__filename);
|
|
22
|
+
const packagePath = join(__dirname, '../../package.json');
|
|
23
|
+
const packageData = JSON.parse(readFileSync(packagePath, 'utf-8'));
|
|
24
|
+
this.currentVersion = packageData.version || '2.0.0';
|
|
25
|
+
} catch (error) {
|
|
26
|
+
Logger.debug('Failed to read version from package.json, using fallback');
|
|
27
|
+
this.currentVersion = '2.0.0';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
13
30
|
|
|
14
31
|
/**
|
|
15
32
|
* Get version information from npm registry
|
package/tsconfig.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
3
|
"target": "ES2020",
|
|
4
|
-
"module": "
|
|
5
|
-
"lib": ["ES2020"],
|
|
4
|
+
"module": "ES2020",
|
|
5
|
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
6
6
|
"outDir": "./dist",
|
|
7
7
|
"rootDir": "./src",
|
|
8
|
+
"moduleResolution": "node",
|
|
8
9
|
"strict": true,
|
|
9
10
|
"esModuleInterop": true,
|
|
10
11
|
"skipLibCheck": true,
|
package/INDEX.md
DELETED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
# 📑 AppClean Documentation Index
|
|
2
|
-
|
|
3
|
-
Welcome to AppClean! This index helps you navigate all documentation and resources.
|
|
4
|
-
|
|
5
|
-
## 🚀 Getting Started (Start Here!)
|
|
6
|
-
|
|
7
|
-
### For New Users
|
|
8
|
-
1. **[QUICKSTART.md](QUICKSTART.md)** - Quick start guide and 3-step deployment
|
|
9
|
-
2. **[SETUP_GITHUB.md](SETUP_GITHUB.md)** - Detailed GitHub & npm setup instructions
|
|
10
|
-
3. **[README.md](README.md)** - Full user documentation with examples
|
|
11
|
-
|
|
12
|
-
### For Developers
|
|
13
|
-
1. **[CONTRIBUTING.md](CONTRIBUTING.md)** - Developer guidelines and workflow
|
|
14
|
-
2. **[DEPLOYMENT_GUIDE.md](DEPLOYMENT_GUIDE.md)** - Full deployment checklist
|
|
15
|
-
3. **[APPCLEAN_SUMMARY.md](APPCLEAN_SUMMARY.md)** - Complete technical summary
|
|
16
|
-
|
|
17
|
-
## 📚 Documentation by Purpose
|
|
18
|
-
|
|
19
|
-
### Installation & Setup
|
|
20
|
-
| File | Purpose |
|
|
21
|
-
|------|---------|
|
|
22
|
-
| [QUICKSTART.md](QUICKSTART.md) | Quick start overview |
|
|
23
|
-
| [SETUP_GITHUB.md](SETUP_GITHUB.md) | GitHub & npm deployment |
|
|
24
|
-
| [setup-github.sh](setup-github.sh) | Automated setup script |
|
|
25
|
-
|
|
26
|
-
### User Documentation
|
|
27
|
-
| File | Purpose |
|
|
28
|
-
|------|---------|
|
|
29
|
-
| [README.md](README.md) | Features, installation, usage, examples |
|
|
30
|
-
| [PROJECT_SUMMARY.txt](PROJECT_SUMMARY.txt) | Project overview |
|
|
31
|
-
| [APPCLEAN_SUMMARY.md](APPCLEAN_SUMMARY.md) | Detailed summary |
|
|
32
|
-
|
|
33
|
-
### Developer Resources
|
|
34
|
-
| File | Purpose |
|
|
35
|
-
|------|---------|
|
|
36
|
-
| [CONTRIBUTING.md](CONTRIBUTING.md) | How to contribute |
|
|
37
|
-
| [DEPLOYMENT_GUIDE.md](DEPLOYMENT_GUIDE.md) | Deployment steps & checklist |
|
|
38
|
-
| [CHANGELOG.md](CHANGELOG.md) | Version history & roadmap |
|
|
39
|
-
|
|
40
|
-
### Code & Configuration
|
|
41
|
-
| File | Purpose |
|
|
42
|
-
|------|---------|
|
|
43
|
-
| [package.json](package.json) | Project metadata & dependencies |
|
|
44
|
-
| [tsconfig.json](tsconfig.json) | TypeScript configuration |
|
|
45
|
-
| [jest.config.js](jest.config.js) | Test configuration |
|
|
46
|
-
| [.gitignore](.gitignore) | Git ignore rules |
|
|
47
|
-
|
|
48
|
-
### GitHub Actions
|
|
49
|
-
| File | Purpose |
|
|
50
|
-
|------|---------|
|
|
51
|
-
| [.github/workflows/test.yml](.github/workflows/test.yml) | Automated testing |
|
|
52
|
-
| [.github/workflows/publish.yml](.github/workflows/publish.yml) | npm publishing |
|
|
53
|
-
|
|
54
|
-
### License
|
|
55
|
-
| File | Purpose |
|
|
56
|
-
|------|---------|
|
|
57
|
-
| [LICENSE](LICENSE) | MIT License |
|
|
58
|
-
|
|
59
|
-
## 🔍 Quick Navigation
|
|
60
|
-
|
|
61
|
-
### I want to...
|
|
62
|
-
|
|
63
|
-
**Deploy to GitHub**
|
|
64
|
-
→ Read [SETUP_GITHUB.md](SETUP_GITHUB.md)
|
|
65
|
-
|
|
66
|
-
**Publish to npm**
|
|
67
|
-
→ Read [SETUP_GITHUB.md](SETUP_GITHUB.md) (Section: "Setup npm Publishing")
|
|
68
|
-
|
|
69
|
-
**Contribute code**
|
|
70
|
-
→ Read [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
71
|
-
|
|
72
|
-
**Understand the project**
|
|
73
|
-
→ Read [README.md](README.md) then [APPCLEAN_SUMMARY.md](APPCLEAN_SUMMARY.md)
|
|
74
|
-
|
|
75
|
-
**Get started quickly**
|
|
76
|
-
→ Read [QUICKSTART.md](QUICKSTART.md)
|
|
77
|
-
|
|
78
|
-
**Set up development environment**
|
|
79
|
-
→ Read [CONTRIBUTING.md](CONTRIBUTING.md) (Section: "Development Setup")
|
|
80
|
-
|
|
81
|
-
## 📊 Project Structure
|
|
82
|
-
|
|
83
|
-
```
|
|
84
|
-
appclean/
|
|
85
|
-
├── src/ # Source code (13 files)
|
|
86
|
-
│ ├── index.ts # Main CLI entry point
|
|
87
|
-
│ ├── core/
|
|
88
|
-
│ │ ├── detector.ts # App detection engine
|
|
89
|
-
│ │ └── remover.ts # Safe removal engine
|
|
90
|
-
│ ├── managers/
|
|
91
|
-
│ │ ├── npmManager.ts # npm/yarn/pnpm
|
|
92
|
-
│ │ ├── brewManager.ts # Homebrew
|
|
93
|
-
│ │ ├── linuxManager.ts # apt/yum/dnf
|
|
94
|
-
│ │ └── customManager.ts # Custom installers
|
|
95
|
-
│ ├── ui/
|
|
96
|
-
│ │ ├── menu.ts # Interactive menus
|
|
97
|
-
│ │ └── prompts.ts # User prompts
|
|
98
|
-
│ ├── types/
|
|
99
|
-
│ │ └── index.ts # TypeScript types
|
|
100
|
-
│ └── utils/
|
|
101
|
-
│ ├── platform.ts # Platform detection
|
|
102
|
-
│ ├── filesystem.ts # File operations
|
|
103
|
-
│ └── logger.ts # Logging
|
|
104
|
-
├── .github/workflows/ # CI/CD workflows
|
|
105
|
-
├── Configuration files # 4 config files
|
|
106
|
-
├── Documentation files # 8+ guides
|
|
107
|
-
└── LICENSE # MIT License
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
## 🎯 Deployment Checklist
|
|
111
|
-
|
|
112
|
-
- [ ] Read [QUICKSTART.md](QUICKSTART.md)
|
|
113
|
-
- [ ] Review [SETUP_GITHUB.md](SETUP_GITHUB.md)
|
|
114
|
-
- [ ] Create GitHub repository
|
|
115
|
-
- [ ] Update package.json with your info
|
|
116
|
-
- [ ] Push code to GitHub
|
|
117
|
-
- [ ] Create npm account
|
|
118
|
-
- [ ] Publish to npm registry
|
|
119
|
-
- [ ] Update GitHub repository topics
|
|
120
|
-
- [ ] Add GitHub Actions secret (NPM_TOKEN)
|
|
121
|
-
|
|
122
|
-
See [DEPLOYMENT_GUIDE.md](DEPLOYMENT_GUIDE.md) for detailed checklist.
|
|
123
|
-
|
|
124
|
-
## 📖 Recommended Reading Order
|
|
125
|
-
|
|
126
|
-
1. **First Time?** → [QUICKSTART.md](QUICKSTART.md)
|
|
127
|
-
2. **Ready to Deploy?** → [SETUP_GITHUB.md](SETUP_GITHUB.md)
|
|
128
|
-
3. **Want to Understand More?** → [README.md](README.md)
|
|
129
|
-
4. **Contributing Code?** → [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
130
|
-
5. **Need Details?** → [APPCLEAN_SUMMARY.md](APPCLEAN_SUMMARY.md)
|
|
131
|
-
6. **Managing Project?** → [DEPLOYMENT_GUIDE.md](DEPLOYMENT_GUIDE.md)
|
|
132
|
-
|
|
133
|
-
## 🔗 External Links
|
|
134
|
-
|
|
135
|
-
- **GitHub**: https://github.com/new (Create repository)
|
|
136
|
-
- **npm**: https://www.npmjs.com/signup (Create account)
|
|
137
|
-
- **TypeScript**: https://www.typescriptlang.org/docs/
|
|
138
|
-
- **Node.js**: https://nodejs.org/
|
|
139
|
-
|
|
140
|
-
## 📞 Support & Questions
|
|
141
|
-
|
|
142
|
-
- **Bug Reports**: GitHub Issues
|
|
143
|
-
- **Questions**: GitHub Discussions
|
|
144
|
-
- **Documentation**: Check files in this directory
|
|
145
|
-
- **Help**: See [CONTRIBUTING.md](CONTRIBUTING.md) for development help
|
|
146
|
-
|
|
147
|
-
## ✨ Key Features
|
|
148
|
-
|
|
149
|
-
🔍 **Smart Detection** - Finds apps from 8+ installation methods
|
|
150
|
-
📊 **Deep Analysis** - Locates all related files and artifacts
|
|
151
|
-
🛡️ **Safe Removal** - Dry-run preview and backup support
|
|
152
|
-
🎨 **Beautiful UI** - Interactive menus with colors and animations
|
|
153
|
-
🚀 **Cross-Platform** - Works on macOS, Linux, Windows
|
|
154
|
-
|
|
155
|
-
## 🌟 You're All Set!
|
|
156
|
-
|
|
157
|
-
Your AppClean project is production-ready.
|
|
158
|
-
|
|
159
|
-
**Next Step:** Open [SETUP_GITHUB.md](SETUP_GITHUB.md) to begin deployment!
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
**Last Updated:** 2024-01-20
|
|
164
|
-
**License:** MIT
|
|
165
|
-
**Status:** ✅ Ready for Production
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|