@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/installs/jq.js
CHANGED
|
@@ -1,44 +1,400 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @fileoverview Install jq.
|
|
4
|
+
* @fileoverview Install jq - a lightweight and flexible command-line JSON processor.
|
|
5
|
+
*
|
|
6
|
+
* jq is designed to parse, filter, map, and transform structured JSON data with ease.
|
|
7
|
+
* Think of jq as sed or awk for JSON data - it allows you to slice, filter, and
|
|
8
|
+
* transform JSON with concise filter expressions. jq is essential for developers
|
|
9
|
+
* and DevOps engineers working with JSON-based APIs, configuration files, or any
|
|
10
|
+
* structured data.
|
|
11
|
+
*
|
|
5
12
|
* @module installs/jq
|
|
6
13
|
*/
|
|
7
14
|
|
|
8
15
|
const os = require('../utils/common/os');
|
|
16
|
+
const shell = require('../utils/common/shell');
|
|
17
|
+
const brew = require('../utils/macos/brew');
|
|
18
|
+
const apt = require('../utils/ubuntu/apt');
|
|
19
|
+
const choco = require('../utils/windows/choco');
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Install jq on macOS using Homebrew.
|
|
23
|
+
*
|
|
24
|
+
* This function installs jq via Homebrew, which is the recommended method for
|
|
25
|
+
* macOS. Homebrew will automatically install the oniguruma dependency (a regular
|
|
26
|
+
* expressions library) if it is not already present.
|
|
27
|
+
*
|
|
28
|
+
* @returns {Promise<void>}
|
|
29
|
+
*/
|
|
30
|
+
async function install_macos() {
|
|
31
|
+
// Check if Homebrew is available - it is required for macOS installation
|
|
32
|
+
if (!brew.isInstalled()) {
|
|
33
|
+
console.log('Homebrew is not installed. Please install Homebrew first.');
|
|
34
|
+
console.log('Run: dev install homebrew');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Check if jq is already installed by verifying the command exists
|
|
39
|
+
// Unlike cURL, jq is not pre-installed on macOS, so we can check the command directly
|
|
40
|
+
const isInstalled = shell.commandExists('jq');
|
|
41
|
+
if (isInstalled) {
|
|
42
|
+
console.log('jq is already installed, skipping...');
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Install jq using Homebrew with the --quiet flag to suppress non-essential output
|
|
47
|
+
// This makes the command more suitable for automation scripts and CI/CD pipelines
|
|
48
|
+
console.log('Installing jq via Homebrew...');
|
|
49
|
+
const result = await brew.install('jq');
|
|
50
|
+
|
|
51
|
+
if (!result.success) {
|
|
52
|
+
console.log('Failed to install jq via Homebrew.');
|
|
53
|
+
console.log(result.output);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Verify the installation succeeded by checking if the command now exists
|
|
58
|
+
const verified = shell.commandExists('jq');
|
|
59
|
+
if (!verified) {
|
|
60
|
+
console.log('Installation may have failed: jq command not found after install.');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
console.log('jq installed successfully.');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Install jq on Ubuntu/Debian using APT.
|
|
69
|
+
*
|
|
70
|
+
* jq is available in the default Ubuntu and Debian repositories, so no
|
|
71
|
+
* additional PPAs or repositories are required. The repository version may
|
|
72
|
+
* be slightly older than the latest release, but is stable and recommended
|
|
73
|
+
* for most users.
|
|
74
|
+
*
|
|
75
|
+
* @returns {Promise<void>}
|
|
76
|
+
*/
|
|
77
|
+
async function install_ubuntu() {
|
|
78
|
+
// Check if jq is already installed by looking for the command
|
|
79
|
+
const isInstalled = shell.commandExists('jq');
|
|
80
|
+
if (isInstalled) {
|
|
81
|
+
console.log('jq is already installed, skipping...');
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Update package lists before installing to ensure we get the latest available version
|
|
86
|
+
console.log('Updating package lists...');
|
|
87
|
+
const updateResult = await apt.update();
|
|
88
|
+
if (!updateResult.success) {
|
|
89
|
+
console.log('Warning: Failed to update package lists. Continuing with installation...');
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Install jq using APT
|
|
93
|
+
// The apt.install function uses DEBIAN_FRONTEND=noninteractive and -y flag
|
|
94
|
+
// to ensure fully automated installation without prompts
|
|
95
|
+
console.log('Installing jq via APT...');
|
|
96
|
+
const result = await apt.install('jq');
|
|
97
|
+
|
|
98
|
+
if (!result.success) {
|
|
99
|
+
console.log('Failed to install jq via APT.');
|
|
100
|
+
console.log(result.output);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Verify the installation succeeded by checking if the command exists
|
|
105
|
+
const verified = shell.commandExists('jq');
|
|
106
|
+
if (!verified) {
|
|
107
|
+
console.log('Installation may have failed: jq command not found after install.');
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
console.log('jq installed successfully.');
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Install jq on Ubuntu running in WSL.
|
|
116
|
+
*
|
|
117
|
+
* WSL Ubuntu installations follow the same process as native Ubuntu using APT.
|
|
118
|
+
* This function delegates to install_ubuntu() because WSL provides a full
|
|
119
|
+
* Ubuntu environment with APT package management.
|
|
120
|
+
*
|
|
121
|
+
* @returns {Promise<void>}
|
|
122
|
+
*/
|
|
123
|
+
async function install_ubuntu_wsl() {
|
|
124
|
+
// WSL Ubuntu uses the same APT-based installation as native Ubuntu
|
|
125
|
+
await install_ubuntu();
|
|
126
|
+
}
|
|
9
127
|
|
|
10
128
|
/**
|
|
11
|
-
* Install jq
|
|
129
|
+
* Install jq on Raspberry Pi OS using APT.
|
|
130
|
+
*
|
|
131
|
+
* Raspberry Pi OS is based on Debian, so jq installation follows the same
|
|
132
|
+
* process as Ubuntu/Debian. The jq package is available for both 32-bit (armv7l)
|
|
133
|
+
* and 64-bit (aarch64) ARM architectures.
|
|
134
|
+
*
|
|
135
|
+
* @returns {Promise<void>}
|
|
136
|
+
*/
|
|
137
|
+
async function install_raspbian() {
|
|
138
|
+
// Raspberry Pi OS uses the same APT-based installation as Ubuntu/Debian
|
|
139
|
+
await install_ubuntu();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Install jq on Amazon Linux using DNF or YUM.
|
|
144
|
+
*
|
|
145
|
+
* jq is available in the default Amazon Linux repositories. This function
|
|
146
|
+
* automatically detects whether to use dnf (Amazon Linux 2023) or yum
|
|
147
|
+
* (Amazon Linux 2) based on the available package manager.
|
|
148
|
+
*
|
|
149
|
+
* @returns {Promise<void>}
|
|
150
|
+
*/
|
|
151
|
+
async function install_amazon_linux() {
|
|
152
|
+
// Check if jq is already installed by looking for the command
|
|
153
|
+
const isInstalled = shell.commandExists('jq');
|
|
154
|
+
if (isInstalled) {
|
|
155
|
+
console.log('jq is already installed, skipping...');
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Detect the platform to determine which package manager to use
|
|
160
|
+
// Amazon Linux 2023 uses dnf, Amazon Linux 2 uses yum
|
|
161
|
+
const platform = os.detect();
|
|
162
|
+
const packageManager = platform.packageManager;
|
|
163
|
+
|
|
164
|
+
// Construct the install command based on available package manager
|
|
165
|
+
// The -y flag automatically confirms installation prompts for non-interactive execution
|
|
166
|
+
const installCommand = packageManager === 'dnf'
|
|
167
|
+
? 'sudo dnf install -y jq'
|
|
168
|
+
: 'sudo yum install -y jq';
|
|
169
|
+
|
|
170
|
+
// Install jq
|
|
171
|
+
console.log(`Installing jq via ${packageManager}...`);
|
|
172
|
+
const result = await shell.exec(installCommand);
|
|
173
|
+
|
|
174
|
+
if (result.code !== 0) {
|
|
175
|
+
console.log(`Failed to install jq via ${packageManager}.`);
|
|
176
|
+
console.log(result.stderr || result.stdout);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Verify the installation succeeded by checking if the command exists
|
|
181
|
+
const verified = shell.commandExists('jq');
|
|
182
|
+
if (!verified) {
|
|
183
|
+
console.log('Installation may have failed: jq command not found after install.');
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
console.log('jq installed successfully.');
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Install jq on Windows using Chocolatey.
|
|
192
|
+
*
|
|
193
|
+
* This function installs jq via Chocolatey, which downloads the appropriate
|
|
194
|
+
* binary (32-bit or 64-bit) based on system architecture and adds it to the
|
|
195
|
+
* PATH automatically. A new terminal window may be required for PATH updates
|
|
196
|
+
* to take effect.
|
|
197
|
+
*
|
|
198
|
+
* @returns {Promise<void>}
|
|
199
|
+
*/
|
|
200
|
+
async function install_windows() {
|
|
201
|
+
// Check if Chocolatey is available - it is required for Windows installation
|
|
202
|
+
if (!choco.isInstalled()) {
|
|
203
|
+
console.log('Chocolatey is not installed. Please install Chocolatey first.');
|
|
204
|
+
console.log('Run: dev install chocolatey');
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Check if jq is already installed via Chocolatey
|
|
209
|
+
const isChocoJqInstalled = await choco.isPackageInstalled('jq');
|
|
210
|
+
if (isChocoJqInstalled) {
|
|
211
|
+
console.log('jq is already installed via Chocolatey, skipping...');
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Also check if jq command exists (might be installed via other means like winget)
|
|
216
|
+
const commandExists = shell.commandExists('jq');
|
|
217
|
+
if (commandExists) {
|
|
218
|
+
console.log('jq is already installed, skipping...');
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Install jq using Chocolatey
|
|
223
|
+
// The -y flag automatically confirms all prompts for fully non-interactive installation
|
|
224
|
+
console.log('Installing jq via Chocolatey...');
|
|
225
|
+
const result = await choco.install('jq');
|
|
226
|
+
|
|
227
|
+
if (!result.success) {
|
|
228
|
+
console.log('Failed to install jq via Chocolatey.');
|
|
229
|
+
console.log(result.output);
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Verify the installation succeeded by checking if the package is now installed
|
|
234
|
+
const verified = await choco.isPackageInstalled('jq');
|
|
235
|
+
if (!verified) {
|
|
236
|
+
console.log('Installation may have failed: jq package not found after install.');
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
console.log('jq installed successfully via Chocolatey.');
|
|
241
|
+
console.log('');
|
|
242
|
+
console.log('Note: You may need to open a new terminal window for the PATH update to take effect.');
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Install jq on Git Bash (Windows).
|
|
247
|
+
*
|
|
248
|
+
* Git Bash does not include jq by default. This function downloads the Windows
|
|
249
|
+
* binary directly from the official jq GitHub releases and places it in
|
|
250
|
+
* /usr/local/bin, which is included in Git Bash's PATH.
|
|
251
|
+
*
|
|
252
|
+
* @returns {Promise<void>}
|
|
253
|
+
*/
|
|
254
|
+
async function install_gitbash() {
|
|
255
|
+
// Check if jq is already available in Git Bash
|
|
256
|
+
const isInstalled = shell.commandExists('jq');
|
|
257
|
+
if (isInstalled) {
|
|
258
|
+
console.log('jq is already installed, skipping...');
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// Create the /usr/local/bin directory if it does not exist
|
|
263
|
+
// This directory is typically in Git Bash's PATH
|
|
264
|
+
console.log('Creating /usr/local/bin directory if needed...');
|
|
265
|
+
const mkdirResult = await shell.exec('mkdir -p /usr/local/bin');
|
|
266
|
+
if (mkdirResult.code !== 0) {
|
|
267
|
+
console.log('Failed to create /usr/local/bin directory.');
|
|
268
|
+
console.log('Try running Git Bash as Administrator.');
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Download the jq Windows binary from the official GitHub releases
|
|
273
|
+
// Using version 1.8.1 as specified in the documentation
|
|
274
|
+
console.log('Downloading jq from GitHub releases...');
|
|
275
|
+
const downloadUrl = 'https://github.com/jqlang/jq/releases/download/jq-1.8.1/jq-windows-amd64.exe';
|
|
276
|
+
const downloadCommand = `curl -L -o /usr/local/bin/jq.exe "${downloadUrl}"`;
|
|
277
|
+
const downloadResult = await shell.exec(downloadCommand);
|
|
278
|
+
|
|
279
|
+
if (downloadResult.code !== 0) {
|
|
280
|
+
console.log('Failed to download jq binary.');
|
|
281
|
+
console.log(downloadResult.stderr || downloadResult.stdout);
|
|
282
|
+
console.log('');
|
|
283
|
+
console.log('If you encounter SSL certificate errors, try running:');
|
|
284
|
+
console.log(' curl -k -L -o /usr/local/bin/jq.exe "' + downloadUrl + '"');
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Verify the installation succeeded by checking if the command now exists
|
|
289
|
+
const verified = shell.commandExists('jq');
|
|
290
|
+
if (!verified) {
|
|
291
|
+
console.log('Installation may have failed: jq command not found after install.');
|
|
292
|
+
console.log('');
|
|
293
|
+
console.log('The /usr/local/bin directory may not be in your PATH. Add it manually:');
|
|
294
|
+
console.log(' echo \'export PATH="/usr/local/bin:$PATH"\' >> ~/.bashrc && source ~/.bashrc');
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
console.log('jq installed successfully.');
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Check if jq is installed on the current platform.
|
|
303
|
+
*
|
|
304
|
+
* On macOS, checks if the jq formula is installed via Homebrew.
|
|
305
|
+
* On Windows, checks if jq is installed via Chocolatey.
|
|
306
|
+
* On Linux and Git Bash, checks if the jq command exists.
|
|
307
|
+
*
|
|
308
|
+
* @returns {Promise<boolean>} True if installed, false otherwise
|
|
309
|
+
*/
|
|
310
|
+
async function isInstalled() {
|
|
311
|
+
const platform = os.detect();
|
|
312
|
+
|
|
313
|
+
if (platform.type === 'macos') {
|
|
314
|
+
return brew.isFormulaInstalled('jq');
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
if (platform.type === 'windows') {
|
|
318
|
+
return choco.isPackageInstalled('jq');
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// Linux and Git Bash: Check if jq command exists
|
|
322
|
+
return shell.commandExists('jq');
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Check if this installer is supported on the current platform.
|
|
327
|
+
* jq is supported on all major platforms.
|
|
328
|
+
* @returns {boolean} True if installation is supported on this platform
|
|
329
|
+
*/
|
|
330
|
+
function isEligible() {
|
|
331
|
+
const platform = os.detect();
|
|
332
|
+
return ['macos', 'ubuntu', 'debian', 'wsl', 'raspbian', 'amazon_linux', 'fedora', 'rhel', 'windows', 'gitbash'].includes(platform.type);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Main installation entry point - detects platform and runs appropriate installer.
|
|
337
|
+
*
|
|
338
|
+
* This function detects the current operating system and dispatches to the
|
|
339
|
+
* appropriate platform-specific installer function. Supported platforms:
|
|
340
|
+
* - macOS (Homebrew)
|
|
341
|
+
* - Ubuntu/Debian (APT)
|
|
342
|
+
* - Ubuntu on WSL (APT)
|
|
343
|
+
* - Raspberry Pi OS (APT)
|
|
344
|
+
* - Amazon Linux/RHEL (DNF/YUM)
|
|
345
|
+
* - Windows (Chocolatey)
|
|
346
|
+
* - Git Bash (Manual download from GitHub)
|
|
12
347
|
*
|
|
13
348
|
* @returns {Promise<void>}
|
|
14
349
|
*/
|
|
15
350
|
async function install() {
|
|
16
351
|
const platform = os.detect();
|
|
17
352
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
353
|
+
// Map platform types to their corresponding installer functions
|
|
354
|
+
// Multiple platform types can map to the same installer (e.g., debian and ubuntu)
|
|
355
|
+
const installers = {
|
|
356
|
+
'macos': install_macos,
|
|
357
|
+
'ubuntu': install_ubuntu,
|
|
358
|
+
'debian': install_ubuntu,
|
|
359
|
+
'wsl': install_ubuntu_wsl,
|
|
360
|
+
'raspbian': install_raspbian,
|
|
361
|
+
'amazon_linux': install_amazon_linux,
|
|
362
|
+
'fedora': install_amazon_linux,
|
|
363
|
+
'rhel': install_amazon_linux,
|
|
364
|
+
'windows': install_windows,
|
|
365
|
+
'gitbash': install_gitbash,
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
// Look up the installer for the detected platform
|
|
369
|
+
const installer = installers[platform.type];
|
|
370
|
+
|
|
371
|
+
// If no installer exists for this platform, inform the user gracefully
|
|
372
|
+
// Do not throw an error - just log a message and return
|
|
373
|
+
if (!installer) {
|
|
374
|
+
console.log(`jq is not available for ${platform.type}.`);
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// Run the platform-specific installer
|
|
379
|
+
await installer();
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
module.exports = {
|
|
383
|
+
install,
|
|
384
|
+
isInstalled,
|
|
385
|
+
isEligible,
|
|
386
|
+
install_macos,
|
|
387
|
+
install_ubuntu,
|
|
388
|
+
install_ubuntu_wsl,
|
|
389
|
+
install_raspbian,
|
|
390
|
+
install_amazon_linux,
|
|
391
|
+
install_windows,
|
|
392
|
+
install_gitbash,
|
|
393
|
+
};
|
|
41
394
|
|
|
42
395
|
if (require.main === module) {
|
|
43
|
-
install()
|
|
396
|
+
install().catch(err => {
|
|
397
|
+
console.error(err.message);
|
|
398
|
+
process.exit(1);
|
|
399
|
+
});
|
|
44
400
|
}
|