@fredlackey/devutils 0.0.1 → 0.0.3
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/README.md +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
- package/src/utils/windows/choco.js +82 -26
- package/src/utils/windows/winget.js +89 -27
|
@@ -1,44 +1,321 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @fileoverview Install AppCleaner.
|
|
4
|
+
* @fileoverview Install AppCleaner (macOS) or equivalent application uninstaller tools.
|
|
5
|
+
*
|
|
6
|
+
* AppCleaner by FreeMacSoft is a macOS-only application for thoroughly uninstalling
|
|
7
|
+
* unwanted applications. On Windows, Bulk Crap Uninstaller (BCUninstaller) serves
|
|
8
|
+
* as an equivalent tool. On Linux platforms, built-in package manager commands
|
|
9
|
+
* (apt purge, apt autoremove) provide similar functionality.
|
|
10
|
+
*
|
|
5
11
|
* @module installs/appcleaner
|
|
6
12
|
*/
|
|
7
13
|
|
|
8
14
|
const os = require('../utils/common/os');
|
|
15
|
+
const brew = require('../utils/macos/brew');
|
|
16
|
+
const macosApps = require('../utils/macos/apps');
|
|
17
|
+
const winget = require('../utils/windows/winget');
|
|
18
|
+
const choco = require('../utils/windows/choco');
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Whether this installer requires a desktop environment to function.
|
|
22
|
+
* AppCleaner is a GUI application uninstaller utility.
|
|
23
|
+
*/
|
|
24
|
+
const REQUIRES_DESKTOP = true;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Install AppCleaner on macOS using Homebrew.
|
|
28
|
+
*
|
|
29
|
+
* AppCleaner is installed as a Homebrew cask (GUI application) and will be
|
|
30
|
+
* placed in /Applications/AppCleaner.app after installation.
|
|
31
|
+
*
|
|
32
|
+
* @returns {Promise<void>}
|
|
33
|
+
*/
|
|
34
|
+
async function install_macos() {
|
|
35
|
+
// Check if AppCleaner is already installed by looking for the .app bundle
|
|
36
|
+
const isAlreadyInstalled = macosApps.isAppInstalled('AppCleaner');
|
|
37
|
+
if (isAlreadyInstalled) {
|
|
38
|
+
console.log('AppCleaner is already installed, skipping...');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Verify Homebrew is available before attempting installation
|
|
43
|
+
if (!brew.isInstalled()) {
|
|
44
|
+
console.log('Homebrew is required to install AppCleaner. Please install Homebrew first using: dev install homebrew');
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Install AppCleaner via Homebrew cask
|
|
49
|
+
console.log('Installing AppCleaner via Homebrew...');
|
|
50
|
+
const result = await brew.installCask('appcleaner');
|
|
51
|
+
|
|
52
|
+
if (!result.success) {
|
|
53
|
+
console.log('Failed to install AppCleaner: ' + result.output);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Verify installation succeeded by checking for the .app bundle
|
|
58
|
+
const verified = macosApps.isAppInstalled('AppCleaner');
|
|
59
|
+
if (!verified) {
|
|
60
|
+
console.log('Installation may have failed: AppCleaner.app not found in /Applications');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
console.log('AppCleaner installed successfully.');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Handle AppCleaner installation request on Ubuntu/Debian.
|
|
69
|
+
*
|
|
70
|
+
* AppCleaner is NOT available on Ubuntu/Debian. This function returns gracefully
|
|
71
|
+
* with an informational message. Ubuntu/Debian users can use built-in APT commands
|
|
72
|
+
* (apt purge, apt autoremove) for application removal.
|
|
73
|
+
*
|
|
74
|
+
* @returns {Promise<void>}
|
|
75
|
+
*/
|
|
76
|
+
async function install_ubuntu() {
|
|
77
|
+
console.log('AppCleaner is not available for Ubuntu.');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Handle AppCleaner installation request on Ubuntu running in WSL.
|
|
83
|
+
*
|
|
84
|
+
* AppCleaner cannot run in WSL since it is a macOS application. This function
|
|
85
|
+
* returns gracefully with an informational message.
|
|
86
|
+
*
|
|
87
|
+
* @returns {Promise<void>}
|
|
88
|
+
*/
|
|
89
|
+
async function install_ubuntu_wsl() {
|
|
90
|
+
console.log('AppCleaner is not available for WSL.');
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
9
93
|
|
|
10
94
|
/**
|
|
11
|
-
*
|
|
95
|
+
* Handle AppCleaner installation request on Raspberry Pi OS.
|
|
96
|
+
*
|
|
97
|
+
* AppCleaner is NOT available on Raspberry Pi OS. This function returns gracefully
|
|
98
|
+
* with an informational message. Raspberry Pi users can use built-in APT commands
|
|
99
|
+
* (apt purge, apt autoremove) for application removal.
|
|
100
|
+
*
|
|
101
|
+
* @returns {Promise<void>}
|
|
102
|
+
*/
|
|
103
|
+
async function install_raspbian() {
|
|
104
|
+
console.log('AppCleaner is not available for Raspberry Pi OS.');
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Handle AppCleaner installation request on Amazon Linux/RHEL.
|
|
110
|
+
*
|
|
111
|
+
* AppCleaner is NOT available on Amazon Linux or RHEL. This function returns
|
|
112
|
+
* gracefully with an informational message. These platforms can use built-in
|
|
113
|
+
* DNF/YUM commands (dnf remove, dnf autoremove) for application removal.
|
|
114
|
+
*
|
|
115
|
+
* @returns {Promise<void>}
|
|
116
|
+
*/
|
|
117
|
+
async function install_amazon_linux() {
|
|
118
|
+
console.log('AppCleaner is not available for Amazon Linux.');
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Install Bulk Crap Uninstaller on Windows as the AppCleaner equivalent.
|
|
124
|
+
*
|
|
125
|
+
* Since AppCleaner is macOS-only, this installs Bulk Crap Uninstaller (BCUninstaller)
|
|
126
|
+
* which provides similar functionality on Windows. Installation is attempted first
|
|
127
|
+
* via winget (preferred), then falls back to Chocolatey if winget is unavailable.
|
|
128
|
+
*
|
|
129
|
+
* @returns {Promise<void>}
|
|
130
|
+
*/
|
|
131
|
+
async function install_windows() {
|
|
132
|
+
// BCUninstaller package identifiers for different package managers
|
|
133
|
+
const WINGET_PACKAGE_ID = 'Klocman.BulkCrapUninstaller';
|
|
134
|
+
const CHOCO_PACKAGE_NAME = 'bulk-crap-uninstaller';
|
|
135
|
+
|
|
136
|
+
// Check if BCUninstaller is already installed via winget
|
|
137
|
+
if (winget.isInstalled()) {
|
|
138
|
+
const isInstalledViaWinget = await winget.isPackageInstalled(WINGET_PACKAGE_ID);
|
|
139
|
+
if (isInstalledViaWinget) {
|
|
140
|
+
console.log('Bulk Crap Uninstaller is already installed, skipping...');
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Check if BCUninstaller is already installed via Chocolatey
|
|
146
|
+
if (choco.isInstalled()) {
|
|
147
|
+
const isInstalledViaChoco = await choco.isPackageInstalled(CHOCO_PACKAGE_NAME);
|
|
148
|
+
if (isInstalledViaChoco) {
|
|
149
|
+
console.log('Bulk Crap Uninstaller is already installed, skipping...');
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Prefer winget for installation (modern Windows package manager)
|
|
155
|
+
if (winget.isInstalled()) {
|
|
156
|
+
console.log('Installing Bulk Crap Uninstaller via winget...');
|
|
157
|
+
const result = await winget.install(WINGET_PACKAGE_ID);
|
|
158
|
+
|
|
159
|
+
if (result.success) {
|
|
160
|
+
console.log('Bulk Crap Uninstaller installed successfully.');
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// winget installation failed, will try Chocolatey as fallback
|
|
165
|
+
console.log('winget installation failed, attempting Chocolatey...');
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Fallback to Chocolatey installation
|
|
169
|
+
if (choco.isInstalled()) {
|
|
170
|
+
console.log('Installing Bulk Crap Uninstaller via Chocolatey...');
|
|
171
|
+
const result = await choco.install(CHOCO_PACKAGE_NAME);
|
|
172
|
+
|
|
173
|
+
if (result.success) {
|
|
174
|
+
console.log('Bulk Crap Uninstaller installed successfully.');
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
console.log('Failed to install Bulk Crap Uninstaller: ' + result.output);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Neither package manager is available
|
|
183
|
+
console.log('Neither winget nor Chocolatey is available. Please install one of these package managers first.');
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Handle AppCleaner installation request on Git Bash.
|
|
189
|
+
*
|
|
190
|
+
* Git Bash runs within Windows, so the portable version of Bulk Crap Uninstaller
|
|
191
|
+
* would be the appropriate solution. However, this requires manual download and
|
|
192
|
+
* extraction. This function returns gracefully with an informational message.
|
|
193
|
+
*
|
|
194
|
+
* @returns {Promise<void>}
|
|
195
|
+
*/
|
|
196
|
+
async function install_gitbash() {
|
|
197
|
+
console.log('AppCleaner is not available for Git Bash.');
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Check if AppCleaner (or equivalent) is installed on the current platform.
|
|
203
|
+
*
|
|
204
|
+
* This function performs platform-specific checks to determine if AppCleaner
|
|
205
|
+
* (macOS) or Bulk Crap Uninstaller (Windows) is already installed.
|
|
206
|
+
*
|
|
207
|
+
* @returns {Promise<boolean>} True if AppCleaner/equivalent is installed
|
|
208
|
+
*/
|
|
209
|
+
async function isInstalled() {
|
|
210
|
+
const platform = os.detect();
|
|
211
|
+
|
|
212
|
+
// macOS: Check for AppCleaner.app
|
|
213
|
+
if (platform.type === 'macos') {
|
|
214
|
+
return macosApps.isAppInstalled('AppCleaner');
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Windows: Check for Bulk Crap Uninstaller via winget or Chocolatey
|
|
218
|
+
if (platform.type === 'windows') {
|
|
219
|
+
const WINGET_PACKAGE_ID = 'Klocman.BulkCrapUninstaller';
|
|
220
|
+
const CHOCO_PACKAGE_NAME = 'bulk-crap-uninstaller';
|
|
221
|
+
|
|
222
|
+
if (winget.isInstalled()) {
|
|
223
|
+
const isInstalledViaWinget = await winget.isPackageInstalled(WINGET_PACKAGE_ID);
|
|
224
|
+
if (isInstalledViaWinget) {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (choco.isInstalled()) {
|
|
230
|
+
const isInstalledViaChoco = await choco.isPackageInstalled(CHOCO_PACKAGE_NAME);
|
|
231
|
+
if (isInstalledViaChoco) {
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Other platforms: Not supported
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Check if this installer is supported on the current platform.
|
|
245
|
+
*
|
|
246
|
+
* AppCleaner/equivalent can be installed on:
|
|
247
|
+
* - macOS (AppCleaner via Homebrew cask)
|
|
248
|
+
* - Windows (Bulk Crap Uninstaller via winget/Chocolatey)
|
|
249
|
+
*
|
|
250
|
+
* @returns {boolean} True if installation is supported on this platform
|
|
251
|
+
*/
|
|
252
|
+
function isEligible() {
|
|
253
|
+
const platform = os.detect();
|
|
254
|
+
const supportedPlatforms = ['macos', 'windows'];
|
|
255
|
+
if (!supportedPlatforms.includes(platform.type)) {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
if (REQUIRES_DESKTOP && !os.isDesktopAvailable()) {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
return true;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Main installation entry point - detects platform and runs appropriate installer.
|
|
266
|
+
*
|
|
267
|
+
* This function automatically detects the current operating system and invokes
|
|
268
|
+
* the corresponding platform-specific installation function. On unsupported
|
|
269
|
+
* platforms, it displays an informational message and returns gracefully.
|
|
12
270
|
*
|
|
13
271
|
* @returns {Promise<void>}
|
|
14
272
|
*/
|
|
15
273
|
async function install() {
|
|
16
274
|
const platform = os.detect();
|
|
17
275
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
276
|
+
// Map platform types to their corresponding installer functions
|
|
277
|
+
const installers = {
|
|
278
|
+
'macos': install_macos,
|
|
279
|
+
'ubuntu': install_ubuntu,
|
|
280
|
+
'debian': install_ubuntu,
|
|
281
|
+
'ubuntu-wsl': install_ubuntu_wsl,
|
|
282
|
+
'wsl': install_ubuntu_wsl,
|
|
283
|
+
'raspbian': install_raspbian,
|
|
284
|
+
'amazon_linux': install_amazon_linux,
|
|
285
|
+
'rhel': install_amazon_linux,
|
|
286
|
+
'fedora': install_amazon_linux,
|
|
287
|
+
'windows': install_windows,
|
|
288
|
+
'gitbash': install_gitbash,
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
const installer = installers[platform.type];
|
|
292
|
+
|
|
293
|
+
// Handle unsupported platforms gracefully without throwing an error
|
|
294
|
+
if (!installer) {
|
|
295
|
+
console.log(`AppCleaner is not available for ${platform.type}.`);
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
await installer();
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
module.exports = {
|
|
303
|
+
REQUIRES_DESKTOP,
|
|
304
|
+
install,
|
|
305
|
+
isInstalled,
|
|
306
|
+
isEligible,
|
|
307
|
+
install_macos,
|
|
308
|
+
install_ubuntu,
|
|
309
|
+
install_ubuntu_wsl,
|
|
310
|
+
install_raspbian,
|
|
311
|
+
install_amazon_linux,
|
|
312
|
+
install_windows,
|
|
313
|
+
install_gitbash,
|
|
314
|
+
};
|
|
41
315
|
|
|
42
316
|
if (require.main === module) {
|
|
43
|
-
install()
|
|
317
|
+
install().catch(err => {
|
|
318
|
+
console.error(err.message);
|
|
319
|
+
process.exit(1);
|
|
320
|
+
});
|
|
44
321
|
}
|