@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
package/src/scripts/q.js CHANGED
@@ -1,23 +1,305 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * @fileoverview Exit the current shell session.
4
+ * q - Exit the current shell session (quick exit)
5
+ *
6
+ * Migrated from legacy dotfiles alias.
7
+ * Original: alias q="exit"
8
+ *
9
+ * IMPORTANT LIMITATION:
10
+ * The original `q` alias worked because shell aliases run in the same process
11
+ * as the shell itself. When you type `q` and it runs `exit`, the shell exits.
12
+ *
13
+ * However, this Node.js script runs as a CHILD PROCESS of your shell. When we
14
+ * call `process.exit()` here, it only exits THIS script's process - not your
15
+ * parent shell. There is no cross-platform way for a child process to force
16
+ * its parent process to terminate.
17
+ *
18
+ * WORKAROUND OPTIONS:
19
+ *
20
+ * 1. Use the native shell command directly:
21
+ * Just type `exit` in your terminal.
22
+ *
23
+ * 2. Create a shell alias (recommended for true `q` behavior):
24
+ * In your ~/.bashrc or ~/.zshrc:
25
+ * alias q="exit"
26
+ *
27
+ * In PowerShell $PROFILE:
28
+ * function q { exit }
29
+ *
30
+ * 3. Source this script's output (advanced):
31
+ * eval "$(q)" # This would work if the script printed "exit"
32
+ *
33
+ * This script provides informative guidance to users about this limitation.
34
+ *
5
35
  * @module scripts/q
6
36
  */
7
37
 
38
+ const os = require('../utils/common/os');
39
+
8
40
  /**
9
- * Exits the current shell session.
10
- * Provides a quick way to close the terminal.
41
+ * Pure Node.js implementation that explains the exit limitation.
42
+ *
43
+ * Since exiting the parent shell is not possible from a child process,
44
+ * this function prints helpful information to the user.
45
+ *
46
+ * @param {string[]} args - Command line arguments
47
+ * @returns {Promise<void>}
48
+ */
49
+ async function do_q_nodejs(args) {
50
+ // Check if user passed --help or -h
51
+ if (args.includes('--help') || args.includes('-h')) {
52
+ printHelp();
53
+ return;
54
+ }
55
+
56
+ // Check if user wants shell-sourceable output (--eval or -e flag)
57
+ // Usage: eval "$(q --eval)" or eval "$(q -e)"
58
+ if (args.includes('--eval') || args.includes('-e')) {
59
+ // Print the exit command so it can be sourced/evaled by the parent shell
60
+ console.log('exit');
61
+ return;
62
+ }
63
+
64
+ // Default behavior: inform the user about the limitation
65
+ console.log('To exit your shell, type: exit');
66
+ console.log('');
67
+ console.log('Note: The `q` command cannot exit your shell directly because');
68
+ console.log('it runs as a child process. For true `q` behavior, add this');
69
+ console.log('alias to your shell config:');
70
+ console.log('');
71
+
72
+ const platform = os.detect();
73
+
74
+ // Provide shell-specific guidance
75
+ if (platform.type === 'windows' || platform.type === 'powershell') {
76
+ console.log(' PowerShell (add to $PROFILE):');
77
+ console.log(' function q { exit }');
78
+ } else if (platform.type === 'cmd') {
79
+ console.log(' CMD (create a doskey alias or batch file):');
80
+ console.log(' doskey q=exit');
81
+ } else {
82
+ // Unix-like systems (macOS, Linux, Git Bash)
83
+ console.log(' Bash/Zsh (add to ~/.bashrc or ~/.zshrc):');
84
+ console.log(' alias q="exit"');
85
+ }
86
+
87
+ console.log('');
88
+ console.log('Alternatively, use: eval "$(q --eval)" to exit immediately.');
89
+ }
90
+
91
+ /**
92
+ * Prints help information about the q command.
93
+ *
94
+ * @returns {void}
95
+ */
96
+ function printHelp() {
97
+ console.log('q - Quick exit command');
98
+ console.log('');
99
+ console.log('Usage:');
100
+ console.log(' q Show exit instructions');
101
+ console.log(' q --eval Print "exit" for shell sourcing');
102
+ console.log(' q -e Same as --eval');
103
+ console.log(' q --help Show this help message');
104
+ console.log(' q -h Same as --help');
105
+ console.log('');
106
+ console.log('Examples:');
107
+ console.log(' # Show instructions');
108
+ console.log(' q');
109
+ console.log('');
110
+ console.log(' # Exit shell immediately (Bash/Zsh):');
111
+ console.log(' eval "$(q --eval)"');
112
+ console.log('');
113
+ console.log(' # Exit shell immediately (PowerShell):');
114
+ console.log(' Invoke-Expression (q --eval)');
115
+ console.log('');
116
+ console.log('Note: For true `q` behavior, create a shell alias instead.');
117
+ console.log('This script cannot exit the parent shell directly because');
118
+ console.log('it runs as a child process.');
119
+ }
120
+
121
+ /**
122
+ * Exit guidance on macOS.
123
+ *
124
+ * On macOS, the default shell is Zsh (since Catalina) or Bash (older versions).
125
+ * Both support the `alias q="exit"` syntax.
126
+ *
127
+ * @param {string[]} args - Command line arguments
128
+ * @returns {Promise<void>}
129
+ */
130
+ async function do_q_macos(args) {
131
+ return do_q_nodejs(args);
132
+ }
133
+
134
+ /**
135
+ * Exit guidance on Ubuntu.
136
+ *
137
+ * Ubuntu uses Bash by default. The `alias q="exit"` syntax works.
138
+ *
139
+ * @param {string[]} args - Command line arguments
140
+ * @returns {Promise<void>}
141
+ */
142
+ async function do_q_ubuntu(args) {
143
+ return do_q_nodejs(args);
144
+ }
145
+
146
+ /**
147
+ * Exit guidance on Raspberry Pi OS.
148
+ *
149
+ * Raspberry Pi OS uses Bash by default. The `alias q="exit"` syntax works.
11
150
  *
12
- * @param {string[]} args - Command line arguments (unused)
151
+ * @param {string[]} args - Command line arguments
13
152
  * @returns {Promise<void>}
14
153
  */
15
- async function main(args) {
16
- // TODO: Implement shell exit
154
+ async function do_q_raspbian(args) {
155
+ return do_q_nodejs(args);
156
+ }
157
+
158
+ /**
159
+ * Exit guidance on Amazon Linux.
160
+ *
161
+ * Amazon Linux uses Bash by default. The `alias q="exit"` syntax works.
162
+ *
163
+ * @param {string[]} args - Command line arguments
164
+ * @returns {Promise<void>}
165
+ */
166
+ async function do_q_amazon_linux(args) {
167
+ return do_q_nodejs(args);
168
+ }
169
+
170
+ /**
171
+ * Exit guidance in Windows Command Prompt.
172
+ *
173
+ * CMD supports doskey macros or batch files for creating aliases.
174
+ * The `exit` command itself works directly in CMD.
175
+ *
176
+ * @param {string[]} args - Command line arguments
177
+ * @returns {Promise<void>}
178
+ */
179
+ async function do_q_cmd(args) {
180
+ // Check for --eval flag
181
+ if (args.includes('--eval') || args.includes('-e')) {
182
+ console.log('exit');
183
+ return;
184
+ }
185
+
186
+ // Check for --help flag
187
+ if (args.includes('--help') || args.includes('-h')) {
188
+ printHelp();
189
+ return;
190
+ }
191
+
192
+ console.log('To exit your shell, type: exit');
193
+ console.log('');
194
+ console.log('Note: The `q` command cannot exit your shell directly because');
195
+ console.log('it runs as a child process. For true `q` behavior, you can:');
196
+ console.log('');
197
+ console.log(' Create a doskey macro (temporary, for current session):');
198
+ console.log(' doskey q=exit');
199
+ console.log('');
200
+ console.log(' Or create a q.bat file in a PATH directory:');
201
+ console.log(' @echo off');
202
+ console.log(' exit');
203
+ }
204
+
205
+ /**
206
+ * Exit guidance in Windows PowerShell.
207
+ *
208
+ * PowerShell supports functions for creating aliases to commands with arguments.
209
+ * The `exit` command works directly in PowerShell.
210
+ *
211
+ * @param {string[]} args - Command line arguments
212
+ * @returns {Promise<void>}
213
+ */
214
+ async function do_q_powershell(args) {
215
+ // Check for --eval flag
216
+ if (args.includes('--eval') || args.includes('-e')) {
217
+ console.log('exit');
218
+ return;
219
+ }
220
+
221
+ // Check for --help flag
222
+ if (args.includes('--help') || args.includes('-h')) {
223
+ printHelp();
224
+ return;
225
+ }
226
+
227
+ console.log('To exit your shell, type: exit');
228
+ console.log('');
229
+ console.log('Note: The `q` command cannot exit your shell directly because');
230
+ console.log('it runs as a child process. For true `q` behavior, add this');
231
+ console.log('to your PowerShell profile ($PROFILE):');
232
+ console.log('');
233
+ console.log(' function q { exit }');
234
+ console.log('');
235
+ console.log('Alternatively, use: Invoke-Expression (q --eval)');
236
+ }
237
+
238
+ /**
239
+ * Exit guidance in Git Bash.
240
+ *
241
+ * Git Bash is a Bash shell on Windows, so `alias q="exit"` works.
242
+ *
243
+ * @param {string[]} args - Command line arguments
244
+ * @returns {Promise<void>}
245
+ */
246
+ async function do_q_gitbash(args) {
247
+ return do_q_nodejs(args);
248
+ }
249
+
250
+ /**
251
+ * Main entry point - detects environment and executes appropriate implementation.
252
+ *
253
+ * The "q" command is a quick shorthand for "exit" to leave the current shell.
254
+ * Due to process isolation, this script cannot directly exit the parent shell,
255
+ * so it provides guidance on how to achieve the desired behavior.
256
+ *
257
+ * @param {string[]} args - Command line arguments
258
+ * @returns {Promise<void>}
259
+ */
260
+ async function do_q(args) {
261
+ const platform = os.detect();
262
+
263
+ const handlers = {
264
+ 'macos': do_q_macos,
265
+ 'ubuntu': do_q_ubuntu,
266
+ 'debian': do_q_ubuntu,
267
+ 'raspbian': do_q_raspbian,
268
+ 'amazon_linux': do_q_amazon_linux,
269
+ 'rhel': do_q_amazon_linux,
270
+ 'fedora': do_q_ubuntu,
271
+ 'linux': do_q_ubuntu,
272
+ 'wsl': do_q_ubuntu,
273
+ 'cmd': do_q_cmd,
274
+ 'windows': do_q_cmd,
275
+ 'powershell': do_q_powershell,
276
+ 'gitbash': do_q_gitbash
277
+ };
278
+
279
+ const handler = handlers[platform.type];
280
+ if (!handler) {
281
+ // Fallback to generic Node.js implementation
282
+ // This ensures the script works on unknown platforms too
283
+ await do_q_nodejs(args);
284
+ return;
285
+ }
286
+
287
+ await handler(args);
17
288
  }
18
289
 
19
- module.exports = { main };
290
+ module.exports = {
291
+ main: do_q,
292
+ do_q,
293
+ do_q_nodejs,
294
+ do_q_macos,
295
+ do_q_ubuntu,
296
+ do_q_raspbian,
297
+ do_q_amazon_linux,
298
+ do_q_cmd,
299
+ do_q_powershell,
300
+ do_q_gitbash
301
+ };
20
302
 
21
303
  if (require.main === module) {
22
- main(process.argv.slice(2));
304
+ do_q(process.argv.slice(2));
23
305
  }