@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
package/src/scripts/brews.js
CHANGED
|
@@ -1,24 +1,477 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* brews - Search for packages via the system package manager
|
|
5
|
+
*
|
|
6
|
+
* Migrated from legacy dotfiles alias.
|
|
7
|
+
* Original: alias brews="brew search"
|
|
8
|
+
*
|
|
9
|
+
* This script provides a cross-platform package search command.
|
|
10
|
+
* On macOS, it wraps Homebrew's search command. On other platforms,
|
|
11
|
+
* it uses the native package manager's search functionality:
|
|
12
|
+
* - macOS: brew search
|
|
13
|
+
* - Ubuntu/Debian: apt-cache search
|
|
14
|
+
* - Raspberry Pi OS: apt-cache search
|
|
15
|
+
* - Amazon Linux: dnf search / yum search
|
|
16
|
+
* - Windows: choco search / winget search
|
|
17
|
+
*
|
|
5
18
|
* @module scripts/brews
|
|
6
19
|
*/
|
|
7
20
|
|
|
21
|
+
const os = require('../utils/common/os');
|
|
22
|
+
const shell = require('../utils/common/shell');
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Pure Node.js implementation - not applicable for this script.
|
|
26
|
+
*
|
|
27
|
+
* Package searching requires shell-based package managers on all platforms,
|
|
28
|
+
* so there is no pure Node.js implementation. Each platform function must
|
|
29
|
+
* invoke the appropriate system package manager's search command.
|
|
30
|
+
*
|
|
31
|
+
* @param {string[]} args - Search term(s)
|
|
32
|
+
* @returns {Promise<void>}
|
|
33
|
+
* @throws {Error} Always throws - this function should not be called directly
|
|
34
|
+
*/
|
|
35
|
+
async function do_brews_nodejs(args) {
|
|
36
|
+
// Package searching requires OS-specific package managers.
|
|
37
|
+
// There is no pure Node.js implementation for this functionality.
|
|
38
|
+
throw new Error(
|
|
39
|
+
'do_brews_nodejs should not be called directly. ' +
|
|
40
|
+
'Package searching requires platform-specific package managers.'
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Search for packages using Homebrew on macOS.
|
|
46
|
+
*
|
|
47
|
+
* Runs `brew search <term>` to search for packages matching the specified term.
|
|
48
|
+
* Homebrew searches both formulae (CLI tools) and casks (GUI applications).
|
|
49
|
+
*
|
|
50
|
+
* @param {string[]} args - Search term(s) to look for
|
|
51
|
+
* @returns {Promise<void>}
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* // Search for packages containing "node"
|
|
55
|
+
* do_brews_macos(['node'])
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* // Search using a regex pattern
|
|
59
|
+
* do_brews_macos(['/^node/'])
|
|
60
|
+
*/
|
|
61
|
+
async function do_brews_macos(args) {
|
|
62
|
+
// Validate that a search term was provided
|
|
63
|
+
if (args.length === 0) {
|
|
64
|
+
console.log('Usage: brews <search-term>');
|
|
65
|
+
console.log('');
|
|
66
|
+
console.log('Search for packages using Homebrew.');
|
|
67
|
+
console.log('');
|
|
68
|
+
console.log('Examples:');
|
|
69
|
+
console.log(' brews node # Search for packages containing "node"');
|
|
70
|
+
console.log(' brews /^node/ # Search using regex (packages starting with "node")');
|
|
71
|
+
console.log(' brews --cask chrome # Search only casks (GUI apps)');
|
|
72
|
+
console.log(' brews --formula wget # Search only formulae (CLI tools)');
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Check if Homebrew is installed
|
|
77
|
+
if (!shell.commandExists('brew')) {
|
|
78
|
+
console.error('Error: Homebrew is not installed.');
|
|
79
|
+
console.error('');
|
|
80
|
+
console.error('Install Homebrew first:');
|
|
81
|
+
console.error(' /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"');
|
|
82
|
+
console.error('');
|
|
83
|
+
console.error('Or use: dev install homebrew');
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Execute brew search with all provided arguments
|
|
88
|
+
// Arguments can include:
|
|
89
|
+
// - Search terms: brews node
|
|
90
|
+
// - Regex patterns: brews /^node/
|
|
91
|
+
// - Flags: brews --cask chrome
|
|
92
|
+
const { spawnSync } = require('child_process');
|
|
93
|
+
|
|
94
|
+
const result = spawnSync('brew', ['search', ...args], {
|
|
95
|
+
stdio: 'inherit', // Pass through stdin/stdout/stderr for real-time output
|
|
96
|
+
shell: false // Run brew directly without shell interpretation
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
// Exit with the same code as brew search
|
|
100
|
+
process.exit(result.status || 0);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Search for packages using APT on Ubuntu.
|
|
105
|
+
*
|
|
106
|
+
* Runs `apt-cache search <term>` to search for packages matching the specified term.
|
|
107
|
+
* APT searches package names and descriptions.
|
|
108
|
+
*
|
|
109
|
+
* @param {string[]} args - Search term(s) to look for
|
|
110
|
+
* @returns {Promise<void>}
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* // Search for packages containing "node"
|
|
114
|
+
* do_brews_ubuntu(['node'])
|
|
115
|
+
*/
|
|
116
|
+
async function do_brews_ubuntu(args) {
|
|
117
|
+
// Validate that a search term was provided
|
|
118
|
+
if (args.length === 0) {
|
|
119
|
+
console.log('Usage: brews <search-term>');
|
|
120
|
+
console.log('');
|
|
121
|
+
console.log('Search for packages using APT (Ubuntu equivalent of brew search).');
|
|
122
|
+
console.log('');
|
|
123
|
+
console.log('Examples:');
|
|
124
|
+
console.log(' brews node # Search for packages containing "node"');
|
|
125
|
+
console.log(' brews nodejs # Search for nodejs packages');
|
|
126
|
+
console.log('');
|
|
127
|
+
console.log('Tips:');
|
|
128
|
+
console.log(' apt-cache show <pkg> # Show detailed info about a package');
|
|
129
|
+
console.log(' apt-cache policy <pkg> # Show version and repository info');
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Check if apt-cache is available
|
|
134
|
+
if (!shell.commandExists('apt-cache')) {
|
|
135
|
+
console.error('Error: apt-cache is not available on this system.');
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Execute apt-cache search with all provided arguments
|
|
140
|
+
// apt-cache search joins multiple terms with AND logic
|
|
141
|
+
const { spawnSync } = require('child_process');
|
|
142
|
+
|
|
143
|
+
const result = spawnSync('apt-cache', ['search', ...args], {
|
|
144
|
+
stdio: 'inherit',
|
|
145
|
+
shell: false
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
// Exit with the same code as apt-cache
|
|
149
|
+
process.exit(result.status || 0);
|
|
150
|
+
}
|
|
151
|
+
|
|
8
152
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
153
|
+
* Search for packages using APT on Raspberry Pi OS.
|
|
154
|
+
*
|
|
155
|
+
* Raspberry Pi OS is Debian-based, so it uses the same APT package manager
|
|
156
|
+
* as Ubuntu. This function delegates to the Ubuntu implementation.
|
|
11
157
|
*
|
|
12
|
-
* @param {string[]} args -
|
|
13
|
-
* @param {string} args.0 - Search term
|
|
158
|
+
* @param {string[]} args - Search term(s) to look for
|
|
14
159
|
* @returns {Promise<void>}
|
|
15
160
|
*/
|
|
16
|
-
async function
|
|
17
|
-
//
|
|
161
|
+
async function do_brews_raspbian(args) {
|
|
162
|
+
// Raspbian uses the same APT package manager as Ubuntu
|
|
163
|
+
return do_brews_ubuntu(args);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Search for packages using DNF or YUM on Amazon Linux.
|
|
168
|
+
*
|
|
169
|
+
* Amazon Linux 2023 uses DNF, while Amazon Linux 2 uses YUM.
|
|
170
|
+
* This function detects which package manager is available and uses it.
|
|
171
|
+
*
|
|
172
|
+
* @param {string[]} args - Search term(s) to look for
|
|
173
|
+
* @returns {Promise<void>}
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* // Search for packages containing "node"
|
|
177
|
+
* do_brews_amazon_linux(['node'])
|
|
178
|
+
*/
|
|
179
|
+
async function do_brews_amazon_linux(args) {
|
|
180
|
+
// Validate that a search term was provided
|
|
181
|
+
if (args.length === 0) {
|
|
182
|
+
console.log('Usage: brews <search-term>');
|
|
183
|
+
console.log('');
|
|
184
|
+
console.log('Search for packages using DNF/YUM (Amazon Linux equivalent of brew search).');
|
|
185
|
+
console.log('');
|
|
186
|
+
console.log('Examples:');
|
|
187
|
+
console.log(' brews node # Search for packages containing "node"');
|
|
188
|
+
console.log(' brews nodejs # Search for nodejs packages');
|
|
189
|
+
console.log('');
|
|
190
|
+
console.log('Tips:');
|
|
191
|
+
console.log(' dnf info <pkg> # Show detailed info about a package');
|
|
192
|
+
console.log(' dnf repoquery <pkg> # Query repository for package info');
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Detect package manager (dnf for AL2023, yum for AL2)
|
|
197
|
+
const hasDnf = shell.commandExists('dnf');
|
|
198
|
+
const hasYum = shell.commandExists('yum');
|
|
199
|
+
const packageManager = hasDnf ? 'dnf' : (hasYum ? 'yum' : null);
|
|
200
|
+
|
|
201
|
+
if (!packageManager) {
|
|
202
|
+
console.error('Error: Neither dnf nor yum package manager found.');
|
|
203
|
+
console.error('This command supports Amazon Linux 2023 (dnf) and Amazon Linux 2 (yum).');
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Execute dnf/yum search with all provided arguments
|
|
208
|
+
const { spawnSync } = require('child_process');
|
|
209
|
+
|
|
210
|
+
const result = spawnSync(packageManager, ['search', ...args], {
|
|
211
|
+
stdio: 'inherit',
|
|
212
|
+
shell: false
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// Exit with the same code as the package manager
|
|
216
|
+
process.exit(result.status || 0);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Search for packages using Chocolatey in Windows Command Prompt.
|
|
221
|
+
*
|
|
222
|
+
* Runs `choco search <term>` to search for packages matching the specified term.
|
|
223
|
+
* Chocolatey searches the Chocolatey Community Repository.
|
|
224
|
+
*
|
|
225
|
+
* @param {string[]} args - Search term(s) to look for
|
|
226
|
+
* @returns {Promise<void>}
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* // Search for packages containing "node"
|
|
230
|
+
* do_brews_cmd(['node'])
|
|
231
|
+
*/
|
|
232
|
+
async function do_brews_cmd(args) {
|
|
233
|
+
// Validate that a search term was provided
|
|
234
|
+
if (args.length === 0) {
|
|
235
|
+
console.log('Usage: brews <search-term>');
|
|
236
|
+
console.log('');
|
|
237
|
+
console.log('Search for packages using Chocolatey (Windows equivalent of brew search).');
|
|
238
|
+
console.log('');
|
|
239
|
+
console.log('Examples:');
|
|
240
|
+
console.log(' brews node # Search for packages containing "node"');
|
|
241
|
+
console.log(' brews nodejs # Search for nodejs packages');
|
|
242
|
+
console.log(' brews --exact nodejs # Search for exact package name match');
|
|
243
|
+
console.log('');
|
|
244
|
+
console.log('Tips:');
|
|
245
|
+
console.log(' choco info <pkg> # Show detailed info about a package');
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Check if Chocolatey is installed
|
|
250
|
+
if (!shell.commandExists('choco')) {
|
|
251
|
+
console.error('Error: Chocolatey is not installed.');
|
|
252
|
+
console.error('');
|
|
253
|
+
console.error('Install Chocolatey first (run as Administrator in PowerShell):');
|
|
254
|
+
console.error(' Set-ExecutionPolicy Bypass -Scope Process -Force;');
|
|
255
|
+
console.error(' [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;');
|
|
256
|
+
console.error(' iex ((New-Object System.Net.WebClient).DownloadString(\'https://community.chocolatey.org/install.ps1\'))');
|
|
257
|
+
console.error('');
|
|
258
|
+
console.error('Alternatively, you can use winget:');
|
|
259
|
+
console.error(' winget search <term>');
|
|
260
|
+
process.exit(1);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Execute choco search with all provided arguments
|
|
264
|
+
const { spawnSync } = require('child_process');
|
|
265
|
+
|
|
266
|
+
const result = spawnSync('choco', ['search', ...args], {
|
|
267
|
+
stdio: 'inherit',
|
|
268
|
+
shell: false
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
// Exit with the same code as choco
|
|
272
|
+
process.exit(result.status || 0);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Search for packages using Chocolatey or winget in Windows PowerShell.
|
|
277
|
+
*
|
|
278
|
+
* Prefers Chocolatey if available, falls back to winget.
|
|
279
|
+
* This mirrors the macOS Homebrew experience.
|
|
280
|
+
*
|
|
281
|
+
* @param {string[]} args - Search term(s) to look for
|
|
282
|
+
* @returns {Promise<void>}
|
|
283
|
+
*/
|
|
284
|
+
async function do_brews_powershell(args) {
|
|
285
|
+
// Validate that a search term was provided
|
|
286
|
+
if (args.length === 0) {
|
|
287
|
+
console.log('Usage: brews <search-term>');
|
|
288
|
+
console.log('');
|
|
289
|
+
console.log('Search for packages using Chocolatey or winget (Windows equivalent of brew search).');
|
|
290
|
+
console.log('');
|
|
291
|
+
console.log('Examples:');
|
|
292
|
+
console.log(' brews node # Search for packages containing "node"');
|
|
293
|
+
console.log(' brews nodejs # Search for nodejs packages');
|
|
294
|
+
console.log('');
|
|
295
|
+
console.log('Tips:');
|
|
296
|
+
console.log(' choco info <pkg> # Show detailed info (Chocolatey)');
|
|
297
|
+
console.log(' winget show <pkg> # Show detailed info (winget)');
|
|
298
|
+
process.exit(1);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// Prefer Chocolatey if available, fall back to winget
|
|
302
|
+
const hasChoco = shell.commandExists('choco');
|
|
303
|
+
const hasWinget = shell.commandExists('winget');
|
|
304
|
+
|
|
305
|
+
if (!hasChoco && !hasWinget) {
|
|
306
|
+
console.error('Error: Neither Chocolatey nor winget is available.');
|
|
307
|
+
console.error('');
|
|
308
|
+
console.error('Install Chocolatey (recommended):');
|
|
309
|
+
console.error(' Set-ExecutionPolicy Bypass -Scope Process -Force;');
|
|
310
|
+
console.error(' [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;');
|
|
311
|
+
console.error(' iex ((New-Object System.Net.WebClient).DownloadString(\'https://community.chocolatey.org/install.ps1\'))');
|
|
312
|
+
console.error('');
|
|
313
|
+
console.error('Or use winget (built into Windows 11 and Windows 10 21H2+).');
|
|
314
|
+
process.exit(1);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
const { spawnSync } = require('child_process');
|
|
318
|
+
let result;
|
|
319
|
+
|
|
320
|
+
if (hasChoco) {
|
|
321
|
+
// Use Chocolatey search
|
|
322
|
+
result = spawnSync('choco', ['search', ...args], {
|
|
323
|
+
stdio: 'inherit',
|
|
324
|
+
shell: false
|
|
325
|
+
});
|
|
326
|
+
} else {
|
|
327
|
+
// Use winget search
|
|
328
|
+
result = spawnSync('winget', ['search', ...args], {
|
|
329
|
+
stdio: 'inherit',
|
|
330
|
+
shell: false
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Exit with the same code as the package manager
|
|
335
|
+
process.exit(result.status || 0);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Search for packages from Git Bash on Windows.
|
|
340
|
+
*
|
|
341
|
+
* Git Bash runs within Windows, so this function uses Chocolatey or winget
|
|
342
|
+
* via the Windows host. Prefers Chocolatey if available.
|
|
343
|
+
*
|
|
344
|
+
* @param {string[]} args - Search term(s) to look for
|
|
345
|
+
* @returns {Promise<void>}
|
|
346
|
+
*/
|
|
347
|
+
async function do_brews_gitbash(args) {
|
|
348
|
+
// Validate that a search term was provided
|
|
349
|
+
if (args.length === 0) {
|
|
350
|
+
console.log('Usage: brews <search-term>');
|
|
351
|
+
console.log('');
|
|
352
|
+
console.log('Search for packages using Chocolatey or winget (Windows equivalent of brew search).');
|
|
353
|
+
console.log('');
|
|
354
|
+
console.log('Examples:');
|
|
355
|
+
console.log(' brews node # Search for packages containing "node"');
|
|
356
|
+
console.log(' brews nodejs # Search for nodejs packages');
|
|
357
|
+
process.exit(1);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// Check for Chocolatey via PowerShell (more reliable in Git Bash)
|
|
361
|
+
const chocoCheck = await shell.exec('powershell.exe -NoProfile -Command "Get-Command choco -ErrorAction SilentlyContinue"');
|
|
362
|
+
const hasChoco = chocoCheck.code === 0 && chocoCheck.stdout.includes('choco');
|
|
363
|
+
|
|
364
|
+
// Check for winget via PowerShell
|
|
365
|
+
const wingetCheck = await shell.exec('powershell.exe -NoProfile -Command "Get-Command winget -ErrorAction SilentlyContinue"');
|
|
366
|
+
const hasWinget = wingetCheck.code === 0 && wingetCheck.stdout.includes('winget');
|
|
367
|
+
|
|
368
|
+
if (!hasChoco && !hasWinget) {
|
|
369
|
+
console.error('Error: Neither Chocolatey nor winget is available.');
|
|
370
|
+
console.error('');
|
|
371
|
+
console.error('Install Chocolatey (run as Administrator in PowerShell):');
|
|
372
|
+
console.error(' Set-ExecutionPolicy Bypass -Scope Process -Force;');
|
|
373
|
+
console.error(' [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;');
|
|
374
|
+
console.error(' iex ((New-Object System.Net.WebClient).DownloadString(\'https://community.chocolatey.org/install.ps1\'))');
|
|
375
|
+
process.exit(1);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
let command;
|
|
379
|
+
let packageManager;
|
|
380
|
+
|
|
381
|
+
if (hasChoco) {
|
|
382
|
+
// Use Chocolatey via PowerShell
|
|
383
|
+
packageManager = 'Chocolatey';
|
|
384
|
+
const searchTerms = args.join(' ');
|
|
385
|
+
command = `powershell.exe -NoProfile -Command "choco search ${searchTerms}"`;
|
|
386
|
+
} else {
|
|
387
|
+
// Use winget via PowerShell
|
|
388
|
+
packageManager = 'winget';
|
|
389
|
+
const searchTerms = args.join(' ');
|
|
390
|
+
command = `powershell.exe -NoProfile -Command "winget search ${searchTerms}"`;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// Execute the search command
|
|
394
|
+
const result = await shell.exec(command);
|
|
395
|
+
|
|
396
|
+
// Output the result
|
|
397
|
+
if (result.stdout) {
|
|
398
|
+
console.log(result.stdout);
|
|
399
|
+
}
|
|
400
|
+
if (result.stderr && result.code !== 0) {
|
|
401
|
+
console.error(result.stderr);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// Exit with the same code as the package manager
|
|
405
|
+
process.exit(result.code || 0);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Main entry point - detects environment and executes appropriate implementation.
|
|
410
|
+
*
|
|
411
|
+
* This script searches for packages using the platform's native package manager:
|
|
412
|
+
* - macOS: Homebrew (brew search)
|
|
413
|
+
* - Ubuntu/Debian: APT (apt-cache search)
|
|
414
|
+
* - Raspberry Pi OS: APT (apt-cache search)
|
|
415
|
+
* - Amazon Linux: DNF or YUM (dnf/yum search)
|
|
416
|
+
* - Windows CMD: Chocolatey (choco search)
|
|
417
|
+
* - Windows PowerShell: Chocolatey or winget (choco/winget search)
|
|
418
|
+
* - Git Bash: Chocolatey or winget via PowerShell
|
|
419
|
+
*
|
|
420
|
+
* @param {string[]} args - Search term(s) to look for
|
|
421
|
+
* @returns {Promise<void>}
|
|
422
|
+
*/
|
|
423
|
+
async function do_brews(args) {
|
|
424
|
+
const platform = os.detect();
|
|
425
|
+
|
|
426
|
+
const handlers = {
|
|
427
|
+
'macos': do_brews_macos,
|
|
428
|
+
'ubuntu': do_brews_ubuntu,
|
|
429
|
+
'debian': do_brews_ubuntu,
|
|
430
|
+
'raspbian': do_brews_raspbian,
|
|
431
|
+
'amazon_linux': do_brews_amazon_linux,
|
|
432
|
+
'rhel': do_brews_amazon_linux,
|
|
433
|
+
'fedora': do_brews_amazon_linux,
|
|
434
|
+
'cmd': do_brews_cmd,
|
|
435
|
+
'windows': do_brews_powershell,
|
|
436
|
+
'powershell': do_brews_powershell,
|
|
437
|
+
'gitbash': do_brews_gitbash,
|
|
438
|
+
'wsl': do_brews_ubuntu
|
|
439
|
+
};
|
|
440
|
+
|
|
441
|
+
const handler = handlers[platform.type];
|
|
442
|
+
if (!handler) {
|
|
443
|
+
console.error(`Platform '${platform.type}' is not supported for this command.`);
|
|
444
|
+
console.error('');
|
|
445
|
+
console.error('Supported platforms:');
|
|
446
|
+
console.error(' - macOS (Homebrew)');
|
|
447
|
+
console.error(' - Ubuntu/Debian (APT)');
|
|
448
|
+
console.error(' - Raspberry Pi OS (APT)');
|
|
449
|
+
console.error(' - Amazon Linux/RHEL/Fedora (DNF/YUM)');
|
|
450
|
+
console.error(' - Windows (Chocolatey/winget)');
|
|
451
|
+
console.error(' - Git Bash (Chocolatey/winget)');
|
|
452
|
+
console.error(' - WSL (APT)');
|
|
453
|
+
process.exit(1);
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
await handler(args);
|
|
18
457
|
}
|
|
19
458
|
|
|
20
|
-
module.exports = {
|
|
459
|
+
module.exports = {
|
|
460
|
+
main: do_brews,
|
|
461
|
+
do_brews,
|
|
462
|
+
do_brews_nodejs,
|
|
463
|
+
do_brews_macos,
|
|
464
|
+
do_brews_ubuntu,
|
|
465
|
+
do_brews_raspbian,
|
|
466
|
+
do_brews_amazon_linux,
|
|
467
|
+
do_brews_cmd,
|
|
468
|
+
do_brews_powershell,
|
|
469
|
+
do_brews_gitbash
|
|
470
|
+
};
|
|
21
471
|
|
|
22
472
|
if (require.main === module) {
|
|
23
|
-
|
|
473
|
+
do_brews(process.argv.slice(2)).catch(err => {
|
|
474
|
+
console.error(err.message);
|
|
475
|
+
process.exit(1);
|
|
476
|
+
});
|
|
24
477
|
}
|