@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.
Files changed (259) hide show
  1. package/README.md +5 -5
  2. package/package.json +1 -1
  3. package/src/commands/install.js +374 -36
  4. package/src/installs/adobe-creative-cloud.js +527 -25
  5. package/src/installs/adobe-creative-cloud.md +605 -0
  6. package/src/installs/appcleaner.js +303 -26
  7. package/src/installs/appcleaner.md +699 -0
  8. package/src/installs/apt-transport-https.js +390 -0
  9. package/src/installs/apt-transport-https.md +678 -0
  10. package/src/installs/atomicparsley.js +624 -26
  11. package/src/installs/atomicparsley.md +795 -0
  12. package/src/installs/aws-cli.js +779 -26
  13. package/src/installs/aws-cli.md +727 -0
  14. package/src/installs/balena-etcher.js +688 -26
  15. package/src/installs/balena-etcher.md +761 -0
  16. package/src/installs/bambu-studio.js +912 -26
  17. package/src/installs/bambu-studio.md +780 -0
  18. package/src/installs/bash-completion.js +554 -23
  19. package/src/installs/bash-completion.md +833 -0
  20. package/src/installs/bash.js +399 -26
  21. package/src/installs/bash.md +993 -0
  22. package/src/installs/beyond-compare.js +585 -26
  23. package/src/installs/beyond-compare.md +813 -0
  24. package/src/installs/build-essential.js +511 -26
  25. package/src/installs/build-essential.md +977 -0
  26. package/src/installs/ca-certificates.js +618 -0
  27. package/src/installs/ca-certificates.md +937 -0
  28. package/src/installs/caffeine.js +490 -26
  29. package/src/installs/caffeine.md +839 -0
  30. package/src/installs/camtasia.js +577 -25
  31. package/src/installs/camtasia.md +762 -0
  32. package/src/installs/chatgpt.js +458 -26
  33. package/src/installs/chatgpt.md +814 -0
  34. package/src/installs/chocolatey.js +447 -0
  35. package/src/installs/chocolatey.md +661 -0
  36. package/src/installs/chrome-canary.js +472 -26
  37. package/src/installs/chrome-canary.md +641 -0
  38. package/src/installs/chromium.js +645 -26
  39. package/src/installs/chromium.md +838 -0
  40. package/src/installs/claude-code.js +558 -26
  41. package/src/installs/claude-code.md +1173 -0
  42. package/src/installs/curl.js +361 -26
  43. package/src/installs/curl.md +714 -0
  44. package/src/installs/cursor.js +561 -26
  45. package/src/installs/cursor.md +970 -0
  46. package/src/installs/dbschema.js +674 -26
  47. package/src/installs/dbschema.md +925 -0
  48. package/src/installs/dependencies.md +435 -0
  49. package/src/installs/development-tools.js +600 -0
  50. package/src/installs/development-tools.md +977 -0
  51. package/src/installs/docker.js +1010 -25
  52. package/src/installs/docker.md +1109 -0
  53. package/src/installs/drawio.js +1001 -26
  54. package/src/installs/drawio.md +795 -0
  55. package/src/installs/elmedia-player.js +328 -25
  56. package/src/installs/elmedia-player.md +556 -0
  57. package/src/installs/ffmpeg.js +870 -25
  58. package/src/installs/ffmpeg.md +852 -0
  59. package/src/installs/file.js +464 -0
  60. package/src/installs/file.md +987 -0
  61. package/src/installs/gemini-cli.js +793 -26
  62. package/src/installs/gemini-cli.md +1153 -0
  63. package/src/installs/git.js +382 -26
  64. package/src/installs/git.md +907 -0
  65. package/src/installs/gitego.js +931 -26
  66. package/src/installs/gitego.md +1172 -0
  67. package/src/installs/go.js +913 -26
  68. package/src/installs/go.md +958 -0
  69. package/src/installs/google-chrome.js +801 -25
  70. package/src/installs/google-chrome.md +862 -0
  71. package/src/installs/gpg.js +412 -73
  72. package/src/installs/gpg.md +1056 -0
  73. package/src/installs/homebrew.js +1015 -26
  74. package/src/installs/homebrew.md +988 -0
  75. package/src/installs/imageoptim.js +950 -26
  76. package/src/installs/imageoptim.md +1119 -0
  77. package/src/installs/installers.json +2297 -0
  78. package/src/installs/jq.js +382 -26
  79. package/src/installs/jq.md +809 -0
  80. package/src/installs/keyboard-maestro.js +701 -26
  81. package/src/installs/keyboard-maestro.md +825 -0
  82. package/src/installs/latex.js +771 -26
  83. package/src/installs/latex.md +1095 -0
  84. package/src/installs/lftp.js +338 -26
  85. package/src/installs/lftp.md +907 -0
  86. package/src/installs/lsb-release.js +346 -0
  87. package/src/installs/lsb-release.md +814 -0
  88. package/src/installs/messenger.js +829 -26
  89. package/src/installs/messenger.md +900 -0
  90. package/src/installs/microsoft-office.js +550 -26
  91. package/src/installs/microsoft-office.md +760 -0
  92. package/src/installs/microsoft-teams.js +782 -25
  93. package/src/installs/microsoft-teams.md +886 -0
  94. package/src/installs/node.js +886 -26
  95. package/src/installs/node.md +1153 -0
  96. package/src/installs/nordpass.js +698 -26
  97. package/src/installs/nordpass.md +921 -0
  98. package/src/installs/nvm.js +977 -26
  99. package/src/installs/nvm.md +1057 -0
  100. package/src/installs/openssh.js +734 -64
  101. package/src/installs/openssh.md +1056 -0
  102. package/src/installs/pandoc.js +644 -26
  103. package/src/installs/pandoc.md +1036 -0
  104. package/src/installs/pinentry.js +492 -26
  105. package/src/installs/pinentry.md +1142 -0
  106. package/src/installs/pngyu.js +851 -26
  107. package/src/installs/pngyu.md +896 -0
  108. package/src/installs/postman.js +781 -26
  109. package/src/installs/postman.md +940 -0
  110. package/src/installs/procps.js +425 -0
  111. package/src/installs/procps.md +851 -0
  112. package/src/installs/safari-tech-preview.js +355 -25
  113. package/src/installs/safari-tech-preview.md +533 -0
  114. package/src/installs/sfnt2woff.js +640 -26
  115. package/src/installs/sfnt2woff.md +795 -0
  116. package/src/installs/shellcheck.js +463 -26
  117. package/src/installs/shellcheck.md +1005 -0
  118. package/src/installs/slack.js +722 -25
  119. package/src/installs/slack.md +865 -0
  120. package/src/installs/snagit.js +566 -25
  121. package/src/installs/snagit.md +844 -0
  122. package/src/installs/software-properties-common.js +372 -0
  123. package/src/installs/software-properties-common.md +805 -0
  124. package/src/installs/spotify.js +858 -25
  125. package/src/installs/spotify.md +901 -0
  126. package/src/installs/studio-3t.js +803 -26
  127. package/src/installs/studio-3t.md +918 -0
  128. package/src/installs/sublime-text.js +780 -25
  129. package/src/installs/sublime-text.md +914 -0
  130. package/src/installs/superwhisper.js +687 -25
  131. package/src/installs/superwhisper.md +630 -0
  132. package/src/installs/tailscale.js +727 -26
  133. package/src/installs/tailscale.md +1100 -0
  134. package/src/installs/tar.js +389 -0
  135. package/src/installs/tar.md +946 -0
  136. package/src/installs/termius.js +780 -26
  137. package/src/installs/termius.md +844 -0
  138. package/src/installs/terraform.js +761 -26
  139. package/src/installs/terraform.md +899 -0
  140. package/src/installs/tidal.js +752 -25
  141. package/src/installs/tidal.md +864 -0
  142. package/src/installs/tmux.js +328 -26
  143. package/src/installs/tmux.md +1030 -0
  144. package/src/installs/tree.js +393 -26
  145. package/src/installs/tree.md +833 -0
  146. package/src/installs/unzip.js +460 -0
  147. package/src/installs/unzip.md +879 -0
  148. package/src/installs/vim.js +403 -26
  149. package/src/installs/vim.md +1040 -0
  150. package/src/installs/vlc.js +803 -26
  151. package/src/installs/vlc.md +927 -0
  152. package/src/installs/vscode.js +825 -26
  153. package/src/installs/vscode.md +1002 -0
  154. package/src/installs/wget.js +415 -0
  155. package/src/installs/wget.md +791 -0
  156. package/src/installs/whatsapp.js +710 -25
  157. package/src/installs/whatsapp.md +854 -0
  158. package/src/installs/winpty.js +352 -0
  159. package/src/installs/winpty.md +620 -0
  160. package/src/installs/woff2.js +535 -26
  161. package/src/installs/woff2.md +977 -0
  162. package/src/installs/wsl.js +572 -0
  163. package/src/installs/wsl.md +699 -0
  164. package/src/installs/xcode-clt.js +520 -0
  165. package/src/installs/xcode-clt.md +351 -0
  166. package/src/installs/xcode.js +542 -26
  167. package/src/installs/xcode.md +573 -0
  168. package/src/installs/yarn.js +806 -26
  169. package/src/installs/yarn.md +1074 -0
  170. package/src/installs/yq.js +636 -26
  171. package/src/installs/yq.md +944 -0
  172. package/src/installs/yt-dlp.js +683 -26
  173. package/src/installs/yt-dlp.md +946 -0
  174. package/src/installs/yum-utils.js +297 -0
  175. package/src/installs/yum-utils.md +648 -0
  176. package/src/installs/zoom.js +740 -25
  177. package/src/installs/zoom.md +884 -0
  178. package/src/scripts/README.md +567 -45
  179. package/src/scripts/STATUS.md +208 -0
  180. package/src/scripts/afk.js +395 -7
  181. package/src/scripts/backup-all.js +731 -9
  182. package/src/scripts/backup-source.js +711 -8
  183. package/src/scripts/brewd.js +373 -7
  184. package/src/scripts/brewi.js +505 -9
  185. package/src/scripts/brewr.js +512 -9
  186. package/src/scripts/brews.js +462 -9
  187. package/src/scripts/brewu.js +488 -7
  188. package/src/scripts/c.js +185 -7
  189. package/src/scripts/ccurl.js +325 -8
  190. package/src/scripts/certbot-crontab-init.js +488 -8
  191. package/src/scripts/certbot-init.js +641 -9
  192. package/src/scripts/ch.js +339 -7
  193. package/src/scripts/claude-danger.js +253 -8
  194. package/src/scripts/clean-dev.js +419 -8
  195. package/src/scripts/clear-dns-cache.js +525 -7
  196. package/src/scripts/clone.js +417 -7
  197. package/src/scripts/code-all.js +420 -7
  198. package/src/scripts/count-files.js +195 -8
  199. package/src/scripts/count-folders.js +195 -8
  200. package/src/scripts/count.js +248 -8
  201. package/src/scripts/d.js +203 -7
  202. package/src/scripts/datauri.js +373 -8
  203. package/src/scripts/delete-files.js +363 -7
  204. package/src/scripts/docker-clean.js +410 -8
  205. package/src/scripts/dp.js +426 -7
  206. package/src/scripts/e.js +375 -9
  207. package/src/scripts/empty-trash.js +497 -7
  208. package/src/scripts/evm.js +428 -9
  209. package/src/scripts/fetch-github-repos.js +441 -10
  210. package/src/scripts/get-channel.js +329 -8
  211. package/src/scripts/get-course.js +384 -11
  212. package/src/scripts/get-dependencies.js +290 -9
  213. package/src/scripts/get-folder.js +783 -10
  214. package/src/scripts/get-tunes.js +411 -10
  215. package/src/scripts/get-video.js +352 -9
  216. package/src/scripts/git-backup.js +561 -9
  217. package/src/scripts/git-clone.js +477 -9
  218. package/src/scripts/git-pup.js +303 -7
  219. package/src/scripts/git-push.js +380 -8
  220. package/src/scripts/h.js +607 -9
  221. package/src/scripts/hide-desktop-icons.js +483 -7
  222. package/src/scripts/hide-hidden-files.js +522 -7
  223. package/src/scripts/install-dependencies-from.js +440 -9
  224. package/src/scripts/ips.js +647 -10
  225. package/src/scripts/iso.js +354 -8
  226. package/src/scripts/killni.js +561 -7
  227. package/src/scripts/ll.js +451 -8
  228. package/src/scripts/local-ip.js +310 -8
  229. package/src/scripts/m.js +508 -8
  230. package/src/scripts/map.js +293 -8
  231. package/src/scripts/mkd.js +287 -7
  232. package/src/scripts/ncu-update-all.js +441 -8
  233. package/src/scripts/nginx-init.js +702 -12
  234. package/src/scripts/npmi.js +366 -7
  235. package/src/scripts/o.js +495 -8
  236. package/src/scripts/org-by-date.js +321 -7
  237. package/src/scripts/p.js +208 -7
  238. package/src/scripts/packages.js +313 -8
  239. package/src/scripts/path.js +209 -7
  240. package/src/scripts/ports.js +582 -8
  241. package/src/scripts/q.js +290 -8
  242. package/src/scripts/refresh-files.js +378 -10
  243. package/src/scripts/remove-smaller-files.js +500 -8
  244. package/src/scripts/rename-files-with-date.js +517 -9
  245. package/src/scripts/resize-image.js +523 -9
  246. package/src/scripts/rm-safe.js +653 -8
  247. package/src/scripts/s.js +525 -9
  248. package/src/scripts/set-git-public.js +349 -7
  249. package/src/scripts/show-desktop-icons.js +459 -7
  250. package/src/scripts/show-hidden-files.js +456 -7
  251. package/src/scripts/tpa.js +265 -8
  252. package/src/scripts/tpo.js +264 -7
  253. package/src/scripts/u.js +489 -7
  254. package/src/scripts/vpush.js +422 -8
  255. package/src/scripts/y.js +267 -7
  256. package/src/utils/common/os.js +94 -2
  257. package/src/utils/ubuntu/apt.js +13 -7
  258. package/src/utils/windows/choco.js +82 -26
  259. 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
- * Install AppCleaner across supported platforms.
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
- switch (platform.type) {
19
- case 'macos':
20
- // TODO: Implement macOS installation
21
- break;
22
- case 'debian':
23
- // TODO: Implement Debian/Ubuntu installation
24
- break;
25
- case 'rhel':
26
- // TODO: Implement RHEL/Amazon Linux installation
27
- break;
28
- case 'windows-wsl':
29
- // TODO: Implement WSL installation
30
- break;
31
- case 'windows':
32
- // TODO: Implement Windows installation
33
- break;
34
- default:
35
- console.error(`Unsupported platform: ${platform.type}`);
36
- process.exit(1);
37
- }
38
- }
39
-
40
- module.exports = { install };
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
  }