@fredlackey/devutils 0.0.18 → 0.1.0
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 +214 -141
- package/package.json +8 -83
- package/src/api/loader.js +229 -0
- package/src/api/registry.json +62 -0
- package/src/cli.js +293 -60
- package/src/commands/ai/index.js +16 -0
- package/src/commands/ai/launch.js +112 -0
- package/src/commands/ai/list.js +54 -0
- package/src/commands/ai/resume.js +70 -0
- package/src/commands/ai/sessions.js +121 -0
- package/src/commands/ai/set.js +131 -0
- package/src/commands/ai/show.js +74 -0
- package/src/commands/ai/tools.js +46 -0
- package/src/commands/alias/add.js +93 -0
- package/src/commands/alias/helpers.js +107 -0
- package/src/commands/alias/index.js +14 -0
- package/src/commands/alias/list.js +55 -0
- package/src/commands/alias/remove.js +62 -0
- package/src/commands/alias/sync.js +109 -0
- package/src/commands/api/disable.js +73 -0
- package/src/commands/api/enable.js +148 -0
- package/src/commands/api/index.js +15 -0
- package/src/commands/api/list.js +66 -0
- package/src/commands/api/update.js +87 -0
- package/src/commands/auth/index.js +15 -0
- package/src/commands/auth/list.js +49 -0
- package/src/commands/auth/login.js +384 -0
- package/src/commands/auth/logout.js +111 -0
- package/src/commands/auth/refresh.js +184 -0
- package/src/commands/auth/services.js +169 -0
- package/src/commands/auth/status.js +104 -0
- package/src/commands/config/export.js +224 -0
- package/src/commands/config/get.js +52 -0
- package/src/commands/config/import.js +308 -0
- package/src/commands/config/index.js +17 -0
- package/src/commands/config/init.js +143 -0
- package/src/commands/config/reset.js +57 -0
- package/src/commands/config/set.js +93 -0
- package/src/commands/config/show.js +35 -0
- package/src/commands/help.js +338 -0
- package/src/commands/identity/add.js +133 -0
- package/src/commands/identity/index.js +17 -0
- package/src/commands/identity/link.js +76 -0
- package/src/commands/identity/list.js +48 -0
- package/src/commands/identity/remove.js +72 -0
- package/src/commands/identity/show.js +65 -0
- package/src/commands/identity/sync.js +172 -0
- package/src/commands/identity/unlink.js +57 -0
- package/src/commands/ignore/add.js +165 -0
- package/src/commands/ignore/index.js +14 -0
- package/src/commands/ignore/list.js +89 -0
- package/src/commands/ignore/markers.js +43 -0
- package/src/commands/ignore/remove.js +164 -0
- package/src/commands/ignore/show.js +169 -0
- package/src/commands/machine/detect.js +122 -0
- package/src/commands/machine/index.js +14 -0
- package/src/commands/machine/list.js +74 -0
- package/src/commands/machine/set.js +106 -0
- package/src/commands/machine/show.js +35 -0
- package/src/commands/schema.js +152 -0
- package/src/commands/search/collections.js +134 -0
- package/src/commands/search/get.js +71 -0
- package/src/commands/search/index-cmd.js +54 -0
- package/src/commands/search/index.js +21 -0
- package/src/commands/search/keyword.js +60 -0
- package/src/commands/search/qmd.js +70 -0
- package/src/commands/search/query.js +64 -0
- package/src/commands/search/semantic.js +62 -0
- package/src/commands/search/status.js +46 -0
- package/src/commands/status.js +224 -171
- package/src/commands/tools/check.js +79 -0
- package/src/commands/tools/index.js +14 -0
- package/src/commands/tools/install.js +110 -0
- package/src/commands/tools/list.js +91 -0
- package/src/commands/tools/search.js +60 -0
- package/src/commands/update.js +83 -112
- package/src/commands/util/add.js +151 -0
- package/src/commands/util/index.js +15 -0
- package/src/commands/util/list.js +97 -0
- package/src/commands/util/remove.js +76 -0
- package/src/commands/util/run.js +79 -0
- package/src/commands/util/show.js +67 -0
- package/src/commands/version.js +21 -88
- package/src/installers/_template.js +104 -0
- package/src/installers/git.js +150 -0
- package/src/installers/homebrew.js +190 -0
- package/src/installers/node.js +223 -0
- package/src/installers/registry.json +29 -0
- package/src/lib/config.js +125 -0
- package/src/lib/detect.js +74 -0
- package/src/lib/errors.js +114 -0
- package/src/lib/github.js +315 -0
- package/src/lib/installer.js +225 -0
- package/src/lib/output.js +239 -0
- package/src/lib/platform.js +112 -0
- package/src/lib/platforms/amazon-linux.js +41 -0
- package/src/lib/platforms/gitbash.js +46 -0
- package/src/lib/platforms/macos.js +45 -0
- package/src/lib/platforms/raspbian.js +41 -0
- package/src/lib/platforms/ubuntu.js +39 -0
- package/src/lib/platforms/windows.js +45 -0
- package/src/lib/prompt.js +161 -0
- package/src/lib/schema.js +211 -0
- package/src/lib/shell.js +75 -0
- package/src/patterns/gitignore/claude-code.txt +25 -0
- package/src/patterns/gitignore/docker.txt +15 -0
- package/src/patterns/gitignore/go.txt +24 -0
- package/src/patterns/gitignore/java.txt +38 -0
- package/src/patterns/gitignore/jetbrains.txt +26 -0
- package/src/patterns/gitignore/linux.txt +18 -0
- package/src/patterns/gitignore/macos.txt +27 -0
- package/src/patterns/gitignore/node.txt +51 -0
- package/src/patterns/gitignore/python.txt +55 -0
- package/src/patterns/gitignore/rust.txt +14 -0
- package/src/patterns/gitignore/terraform.txt +30 -0
- package/src/patterns/gitignore/vscode.txt +15 -0
- package/src/patterns/gitignore/windows.txt +25 -0
- package/src/utils/clone/index.js +165 -0
- package/src/utils/git-push/index.js +230 -0
- package/src/utils/git-status/index.js +116 -0
- package/src/utils/git-status/unix.sh +75 -0
- package/src/utils/registry.json +41 -0
- package/bin/dev.js +0 -16
- package/files/README.md +0 -0
- package/files/claude/.claude/commands/setup-context.md +0 -3
- package/files/monorepos/_archive/README.md +0 -36
- package/files/monorepos/_legacy/README.md +0 -36
- package/files/monorepos/ai-docs/README.md +0 -33
- package/files/monorepos/apps/README.md +0 -24
- package/files/monorepos/docs/README.md +0 -40
- package/files/monorepos/packages/README.md +0 -25
- package/files/monorepos/research/README.md +0 -29
- package/files/monorepos/scripts/README.md +0 -24
- package/src/commands/README.md +0 -41
- package/src/commands/configure.js +0 -199
- package/src/commands/identity.js +0 -1630
- package/src/commands/ignore.js +0 -247
- package/src/commands/install.js +0 -526
- package/src/commands/setup.js +0 -246
- package/src/completion.js +0 -284
- package/src/constants.js +0 -45
- package/src/ignore/claude-code.txt +0 -10
- package/src/ignore/docker.txt +0 -18
- package/src/ignore/linux.txt +0 -23
- package/src/ignore/macos.txt +0 -36
- package/src/ignore/node.txt +0 -55
- package/src/ignore/terraform.txt +0 -37
- package/src/ignore/vscode.txt +0 -18
- package/src/ignore/windows.txt +0 -35
- package/src/index.js +0 -0
- package/src/installs/README.md +0 -399
- package/src/installs/adobe-creative-cloud.js +0 -546
- package/src/installs/adobe-creative-cloud.md +0 -605
- package/src/installs/appcleaner.js +0 -321
- package/src/installs/appcleaner.md +0 -699
- package/src/installs/apt-transport-https.js +0 -390
- package/src/installs/apt-transport-https.md +0 -678
- package/src/installs/atomicparsley.js +0 -642
- package/src/installs/atomicparsley.md +0 -795
- package/src/installs/aws-cli.js +0 -797
- package/src/installs/aws-cli.md +0 -727
- package/src/installs/balena-etcher.js +0 -710
- package/src/installs/balena-etcher.md +0 -761
- package/src/installs/bambu-studio.js +0 -1143
- package/src/installs/bambu-studio.md +0 -780
- package/src/installs/bash-completion.js +0 -575
- package/src/installs/bash-completion.md +0 -833
- package/src/installs/bash.js +0 -417
- package/src/installs/bash.md +0 -993
- package/src/installs/beyond-compare.js +0 -603
- package/src/installs/beyond-compare.md +0 -813
- package/src/installs/brave-browser.js +0 -968
- package/src/installs/brave-browser.md +0 -650
- package/src/installs/build-essential.js +0 -529
- package/src/installs/build-essential.md +0 -977
- package/src/installs/ca-certificates.js +0 -618
- package/src/installs/ca-certificates.md +0 -937
- package/src/installs/caffeine.js +0 -508
- package/src/installs/caffeine.md +0 -839
- package/src/installs/camtasia.js +0 -596
- package/src/installs/camtasia.md +0 -762
- package/src/installs/chatgpt.js +0 -476
- package/src/installs/chatgpt.md +0 -814
- package/src/installs/chocolatey.js +0 -456
- package/src/installs/chocolatey.md +0 -661
- package/src/installs/chrome-canary.js +0 -419
- package/src/installs/chrome-canary.md +0 -641
- package/src/installs/chromium.js +0 -667
- package/src/installs/chromium.md +0 -838
- package/src/installs/claude-code.js +0 -576
- package/src/installs/claude-code.md +0 -1173
- package/src/installs/cloudflare-warp.js +0 -900
- package/src/installs/cloudflare-warp.md +0 -1047
- package/src/installs/comet-browser.js +0 -588
- package/src/installs/comet-browser.md +0 -731
- package/src/installs/curl.js +0 -379
- package/src/installs/curl.md +0 -714
- package/src/installs/cursor.js +0 -579
- package/src/installs/cursor.md +0 -970
- package/src/installs/dbeaver.js +0 -924
- package/src/installs/dbeaver.md +0 -939
- package/src/installs/dbschema.js +0 -692
- package/src/installs/dbschema.md +0 -925
- package/src/installs/dependencies.md +0 -453
- package/src/installs/development-tools.js +0 -600
- package/src/installs/development-tools.md +0 -977
- package/src/installs/docker.js +0 -1029
- package/src/installs/docker.md +0 -1109
- package/src/installs/drawio.js +0 -1019
- package/src/installs/drawio.md +0 -795
- package/src/installs/elmedia-player.js +0 -347
- package/src/installs/elmedia-player.md +0 -556
- package/src/installs/ffmpeg.js +0 -889
- package/src/installs/ffmpeg.md +0 -852
- package/src/installs/file.js +0 -464
- package/src/installs/file.md +0 -987
- package/src/installs/gemini-cli.js +0 -811
- package/src/installs/gemini-cli.md +0 -1153
- package/src/installs/git.js +0 -400
- package/src/installs/git.md +0 -907
- package/src/installs/gitego.js +0 -949
- package/src/installs/gitego.md +0 -1172
- package/src/installs/go.js +0 -931
- package/src/installs/go.md +0 -958
- package/src/installs/google-antigravity.js +0 -913
- package/src/installs/google-antigravity.md +0 -1075
- package/src/installs/google-chrome.js +0 -833
- package/src/installs/google-chrome.md +0 -862
- package/src/installs/gpg.js +0 -480
- package/src/installs/gpg.md +0 -1056
- package/src/installs/homebrew.js +0 -1028
- package/src/installs/homebrew.md +0 -988
- package/src/installs/imageoptim.js +0 -968
- package/src/installs/imageoptim.md +0 -1119
- package/src/installs/installers.json +0 -4032
- package/src/installs/installers.json.tmp +0 -3953
- package/src/installs/jq.js +0 -400
- package/src/installs/jq.md +0 -809
- package/src/installs/keyboard-maestro.js +0 -719
- package/src/installs/keyboard-maestro.md +0 -825
- package/src/installs/kiro.js +0 -864
- package/src/installs/kiro.md +0 -1015
- package/src/installs/latex.js +0 -789
- package/src/installs/latex.md +0 -1095
- package/src/installs/lftp.js +0 -356
- package/src/installs/lftp.md +0 -907
- package/src/installs/lsb-release.js +0 -346
- package/src/installs/lsb-release.md +0 -814
- package/src/installs/messenger.js +0 -847
- package/src/installs/messenger.md +0 -900
- package/src/installs/microsoft-office.js +0 -568
- package/src/installs/microsoft-office.md +0 -760
- package/src/installs/microsoft-teams.js +0 -801
- package/src/installs/microsoft-teams.md +0 -886
- package/src/installs/moom.js +0 -326
- package/src/installs/moom.md +0 -570
- package/src/installs/node.js +0 -904
- package/src/installs/node.md +0 -1153
- package/src/installs/nordpass.js +0 -716
- package/src/installs/nordpass.md +0 -921
- package/src/installs/nordvpn.js +0 -892
- package/src/installs/nordvpn.md +0 -1052
- package/src/installs/nvm.js +0 -995
- package/src/installs/nvm.md +0 -1057
- package/src/installs/ohmyzsh.js +0 -529
- package/src/installs/ohmyzsh.md +0 -1094
- package/src/installs/openssh.js +0 -804
- package/src/installs/openssh.md +0 -1056
- package/src/installs/pandoc.js +0 -662
- package/src/installs/pandoc.md +0 -1036
- package/src/installs/parallels-desktop.js +0 -431
- package/src/installs/parallels-desktop.md +0 -446
- package/src/installs/pinentry.js +0 -510
- package/src/installs/pinentry.md +0 -1142
- package/src/installs/pngyu.js +0 -869
- package/src/installs/pngyu.md +0 -896
- package/src/installs/postman.js +0 -799
- package/src/installs/postman.md +0 -940
- package/src/installs/procps.js +0 -425
- package/src/installs/procps.md +0 -851
- package/src/installs/safari-tech-preview.js +0 -374
- package/src/installs/safari-tech-preview.md +0 -533
- package/src/installs/sfnt2woff.js +0 -658
- package/src/installs/sfnt2woff.md +0 -795
- package/src/installs/shellcheck.js +0 -481
- package/src/installs/shellcheck.md +0 -1005
- package/src/installs/slack.js +0 -741
- package/src/installs/slack.md +0 -865
- package/src/installs/snagit.js +0 -585
- package/src/installs/snagit.md +0 -844
- package/src/installs/software-properties-common.js +0 -372
- package/src/installs/software-properties-common.md +0 -805
- package/src/installs/spotify.js +0 -877
- package/src/installs/spotify.md +0 -901
- package/src/installs/studio-3t.js +0 -823
- package/src/installs/studio-3t.md +0 -918
- package/src/installs/sublime-text.js +0 -804
- package/src/installs/sublime-text.md +0 -914
- package/src/installs/superwhisper.js +0 -706
- package/src/installs/superwhisper.md +0 -630
- package/src/installs/tailscale.js +0 -745
- package/src/installs/tailscale.md +0 -1100
- package/src/installs/tar.js +0 -389
- package/src/installs/tar.md +0 -946
- package/src/installs/termius.js +0 -798
- package/src/installs/termius.md +0 -844
- package/src/installs/terraform.js +0 -779
- package/src/installs/terraform.md +0 -899
- package/src/installs/tfenv.js +0 -778
- package/src/installs/tfenv.md +0 -1091
- package/src/installs/tidal.js +0 -771
- package/src/installs/tidal.md +0 -864
- package/src/installs/tmux.js +0 -346
- package/src/installs/tmux.md +0 -1030
- package/src/installs/tree.js +0 -411
- package/src/installs/tree.md +0 -833
- package/src/installs/unzip.js +0 -460
- package/src/installs/unzip.md +0 -879
- package/src/installs/vim.js +0 -421
- package/src/installs/vim.md +0 -1040
- package/src/installs/vlc.js +0 -821
- package/src/installs/vlc.md +0 -927
- package/src/installs/vscode.js +0 -843
- package/src/installs/vscode.md +0 -1002
- package/src/installs/wget.js +0 -420
- package/src/installs/wget.md +0 -791
- package/src/installs/whatsapp.js +0 -729
- package/src/installs/whatsapp.md +0 -854
- package/src/installs/winpty.js +0 -352
- package/src/installs/winpty.md +0 -620
- package/src/installs/woff2.js +0 -553
- package/src/installs/woff2.md +0 -977
- package/src/installs/wsl.js +0 -572
- package/src/installs/wsl.md +0 -699
- package/src/installs/xcode-clt.js +0 -520
- package/src/installs/xcode-clt.md +0 -351
- package/src/installs/xcode.js +0 -560
- package/src/installs/xcode.md +0 -573
- package/src/installs/yarn.js +0 -824
- package/src/installs/yarn.md +0 -1074
- package/src/installs/yq.js +0 -654
- package/src/installs/yq.md +0 -944
- package/src/installs/yt-dlp.js +0 -701
- package/src/installs/yt-dlp.md +0 -946
- package/src/installs/yum-utils.js +0 -297
- package/src/installs/yum-utils.md +0 -648
- package/src/installs/zoom.js +0 -759
- package/src/installs/zoom.md +0 -884
- package/src/installs/zsh.js +0 -455
- package/src/installs/zsh.md +0 -1008
- package/src/scripts/README.md +0 -617
- package/src/scripts/STATUS.md +0 -208
- package/src/scripts/afk.js +0 -411
- package/src/scripts/backup-all.js +0 -746
- package/src/scripts/backup-source.js +0 -727
- package/src/scripts/brewd.js +0 -389
- package/src/scripts/brewi.js +0 -520
- package/src/scripts/brewr.js +0 -527
- package/src/scripts/brews.js +0 -477
- package/src/scripts/brewu.js +0 -504
- package/src/scripts/c.js +0 -201
- package/src/scripts/ccurl.js +0 -341
- package/src/scripts/certbot-crontab-init.js +0 -504
- package/src/scripts/certbot-init.js +0 -657
- package/src/scripts/ch.js +0 -355
- package/src/scripts/claude-danger.js +0 -268
- package/src/scripts/clean-dev.js +0 -435
- package/src/scripts/clear-dns-cache.js +0 -541
- package/src/scripts/clone.js +0 -435
- package/src/scripts/code-all.js +0 -437
- package/src/scripts/count-files.js +0 -211
- package/src/scripts/count-folders.js +0 -211
- package/src/scripts/count.js +0 -264
- package/src/scripts/d.js +0 -219
- package/src/scripts/datauri.js +0 -389
- package/src/scripts/delete-files.js +0 -380
- package/src/scripts/docker-clean.js +0 -426
- package/src/scripts/dp.js +0 -442
- package/src/scripts/e.js +0 -390
- package/src/scripts/empty-trash.js +0 -513
- package/src/scripts/evm.js +0 -444
- package/src/scripts/fetch-github-repos.js +0 -456
- package/src/scripts/get-channel.js +0 -345
- package/src/scripts/get-course.js +0 -399
- package/src/scripts/get-dependencies.js +0 -306
- package/src/scripts/get-folder.js +0 -799
- package/src/scripts/get-tunes.js +0 -426
- package/src/scripts/get-video.js +0 -367
- package/src/scripts/git-backup.js +0 -577
- package/src/scripts/git-clone.js +0 -493
- package/src/scripts/git-pup.js +0 -319
- package/src/scripts/git-push.js +0 -396
- package/src/scripts/h.js +0 -622
- package/src/scripts/hide-desktop-icons.js +0 -499
- package/src/scripts/hide-hidden-files.js +0 -538
- package/src/scripts/install-dependencies-from.js +0 -456
- package/src/scripts/ips.js +0 -663
- package/src/scripts/iso.js +0 -370
- package/src/scripts/killni.js +0 -577
- package/src/scripts/ll.js +0 -467
- package/src/scripts/local-ip.js +0 -325
- package/src/scripts/m.js +0 -524
- package/src/scripts/map.js +0 -309
- package/src/scripts/mkd.js +0 -351
- package/src/scripts/ncu-update-all.js +0 -457
- package/src/scripts/nginx-init.js +0 -718
- package/src/scripts/npmi.js +0 -382
- package/src/scripts/o.js +0 -511
- package/src/scripts/org-by-date.js +0 -338
- package/src/scripts/p.js +0 -224
- package/src/scripts/packages.js +0 -330
- package/src/scripts/path.js +0 -225
- package/src/scripts/ports.js +0 -597
- package/src/scripts/q.js +0 -305
- package/src/scripts/refresh-files.js +0 -394
- package/src/scripts/remove-smaller-files.js +0 -516
- package/src/scripts/rename-files-with-date.js +0 -533
- package/src/scripts/resize-image.js +0 -539
- package/src/scripts/rm-safe.js +0 -669
- package/src/scripts/s.js +0 -540
- package/src/scripts/set-git-public.js +0 -365
- package/src/scripts/show-desktop-icons.js +0 -475
- package/src/scripts/show-hidden-files.js +0 -472
- package/src/scripts/tpa.js +0 -280
- package/src/scripts/tpo.js +0 -280
- package/src/scripts/u.js +0 -505
- package/src/scripts/vpush.js +0 -437
- package/src/scripts/y.js +0 -283
- package/src/utils/README.md +0 -95
- package/src/utils/common/apps.js +0 -143
- package/src/utils/common/display.js +0 -157
- package/src/utils/common/network.js +0 -185
- package/src/utils/common/os.js +0 -294
- package/src/utils/common/package-manager.js +0 -301
- package/src/utils/common/privileges.js +0 -138
- package/src/utils/common/shell.js +0 -261
- package/src/utils/macos/apps.js +0 -228
- package/src/utils/macos/brew.js +0 -315
- package/src/utils/ubuntu/apt.js +0 -307
- package/src/utils/ubuntu/desktop.js +0 -292
- package/src/utils/ubuntu/snap.js +0 -344
- package/src/utils/ubuntu/systemd.js +0 -286
- package/src/utils/windows/choco.js +0 -465
- package/src/utils/windows/env.js +0 -246
- package/src/utils/windows/registry.js +0 -269
- package/src/utils/windows/shell.js +0 -240
- package/src/utils/windows/winget.js +0 -489
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const os = require('os');
|
|
6
|
+
|
|
7
|
+
const meta = {
|
|
8
|
+
description: 'Unregister a custom utility. Built-in utilities cannot be removed.',
|
|
9
|
+
arguments: [
|
|
10
|
+
{ name: 'name', required: true, description: 'Name of the custom utility to remove' },
|
|
11
|
+
],
|
|
12
|
+
flags: [
|
|
13
|
+
{ name: 'confirm', description: 'Skip the confirmation prompt' },
|
|
14
|
+
],
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
async function run(args, context) {
|
|
18
|
+
const name = args.positional[0];
|
|
19
|
+
if (!name) {
|
|
20
|
+
context.errors.throwError(400, 'Usage: dev util remove <name>', 'util');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Reject removal of built-in utilities
|
|
25
|
+
const builtInRegistry = require('../../utils/registry.json');
|
|
26
|
+
const isBuiltIn = (builtInRegistry.utilities || []).some(u => u.name === name);
|
|
27
|
+
if (isBuiltIn) {
|
|
28
|
+
context.output.error(`"${name}" is a built-in utility and cannot be removed.`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const customDir = path.join(os.homedir(), '.devutils', 'utils');
|
|
33
|
+
const folderPath = path.join(customDir, name);
|
|
34
|
+
const filePath = path.join(customDir, name + '.js');
|
|
35
|
+
|
|
36
|
+
const exists = fs.existsSync(folderPath) || fs.existsSync(filePath);
|
|
37
|
+
if (!exists) {
|
|
38
|
+
context.output.error(`Custom utility "${name}" not found.`);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Ask for confirmation unless --confirm is set
|
|
43
|
+
if (!args.flags.confirm) {
|
|
44
|
+
const ok = await context.prompt.confirm(
|
|
45
|
+
`Remove custom utility "${name}"? This will delete the files.`,
|
|
46
|
+
false
|
|
47
|
+
);
|
|
48
|
+
if (!ok) {
|
|
49
|
+
context.output.info('Cancelled.');
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Delete the files
|
|
55
|
+
if (fs.existsSync(folderPath)) {
|
|
56
|
+
fs.rmSync(folderPath, { recursive: true, force: true });
|
|
57
|
+
} else if (fs.existsSync(filePath)) {
|
|
58
|
+
fs.unlinkSync(filePath);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Update the custom registry
|
|
62
|
+
const registryPath = path.join(customDir, 'registry.json');
|
|
63
|
+
if (fs.existsSync(registryPath)) {
|
|
64
|
+
try {
|
|
65
|
+
const registry = JSON.parse(fs.readFileSync(registryPath, 'utf8'));
|
|
66
|
+
registry.utilities = (registry.utilities || []).filter(u => u.name !== name);
|
|
67
|
+
fs.writeFileSync(registryPath, JSON.stringify(registry, null, 2) + '\n');
|
|
68
|
+
} catch {
|
|
69
|
+
// Registry corrupted, skip update
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
context.output.info(`Utility "${name}" removed.`);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
module.exports = { meta, run };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const os = require('os');
|
|
6
|
+
|
|
7
|
+
const builtInDir = path.join(__dirname, '..', '..', 'utils');
|
|
8
|
+
const customDir = path.join(os.homedir(), '.devutils', 'utils');
|
|
9
|
+
|
|
10
|
+
const meta = {
|
|
11
|
+
description: 'Execute a utility by name. Extra arguments are passed through to the utility.',
|
|
12
|
+
arguments: [
|
|
13
|
+
{ name: 'name', required: true, description: 'Name of the utility to run' },
|
|
14
|
+
],
|
|
15
|
+
flags: [],
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Find a utility by name, checking built-in first, then custom.
|
|
20
|
+
* Supports both folder-based (name/index.js) and single-file (name.js) utilities.
|
|
21
|
+
*
|
|
22
|
+
* @param {string} name - The utility name.
|
|
23
|
+
* @returns {{ path: string, type: string }|null} The utility location, or null if not found.
|
|
24
|
+
*/
|
|
25
|
+
function findUtility(name) {
|
|
26
|
+
// Check built-in: folder with index.js
|
|
27
|
+
const builtInFolder = path.join(builtInDir, name, 'index.js');
|
|
28
|
+
if (fs.existsSync(builtInFolder)) {
|
|
29
|
+
return { path: builtInFolder, type: 'built-in' };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Check built-in: single file
|
|
33
|
+
const builtInFile = path.join(builtInDir, name + '.js');
|
|
34
|
+
if (fs.existsSync(builtInFile)) {
|
|
35
|
+
return { path: builtInFile, type: 'built-in' };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Check custom: folder with index.js
|
|
39
|
+
const customFolder = path.join(customDir, name, 'index.js');
|
|
40
|
+
if (fs.existsSync(customFolder)) {
|
|
41
|
+
return { path: customFolder, type: 'custom' };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Check custom: single file
|
|
45
|
+
const customFile = path.join(customDir, name + '.js');
|
|
46
|
+
if (fs.existsSync(customFile)) {
|
|
47
|
+
return { path: customFile, type: 'custom' };
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async function run(args, context) {
|
|
54
|
+
const name = args.positional[0];
|
|
55
|
+
if (!name) {
|
|
56
|
+
context.errors.throwError(400, 'Usage: dev util run <name> [args...]', 'util');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const utilArgs = args.positional.slice(1);
|
|
61
|
+
|
|
62
|
+
const util = findUtility(name);
|
|
63
|
+
if (!util) {
|
|
64
|
+
context.output.error(`Utility "${name}" not found.`);
|
|
65
|
+
context.output.info('Run "dev util list" to see available utilities.');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const utilModule = require(util.path);
|
|
70
|
+
|
|
71
|
+
if (typeof utilModule.run !== 'function') {
|
|
72
|
+
context.output.error(`Utility "${name}" does not export a run() function.`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
await utilModule.run(utilArgs, context);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
module.exports = { meta, run, findUtility };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const meta = {
|
|
4
|
+
description: 'Show details, supported platforms, and accepted arguments for a utility.',
|
|
5
|
+
arguments: [
|
|
6
|
+
{ name: 'name', required: true, description: 'Name of the utility to inspect' },
|
|
7
|
+
],
|
|
8
|
+
flags: [],
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
async function run(args, context) {
|
|
12
|
+
const name = args.positional[0];
|
|
13
|
+
if (!name) {
|
|
14
|
+
context.errors.throwError(400, 'Usage: dev util show <name>', 'util');
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const { findUtility } = require('./run');
|
|
19
|
+
const util = findUtility(name);
|
|
20
|
+
|
|
21
|
+
if (!util) {
|
|
22
|
+
context.errors.throwError(404, `Utility "${name}" not found. Run "dev util list" to see available utilities.`, 'util');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const utilModule = require(util.path);
|
|
27
|
+
const utilMeta = utilModule.meta || {};
|
|
28
|
+
|
|
29
|
+
const info = {
|
|
30
|
+
name: utilMeta.name || name,
|
|
31
|
+
description: utilMeta.description || '(no description)',
|
|
32
|
+
type: util.type,
|
|
33
|
+
platforms: utilMeta.platforms || [],
|
|
34
|
+
arguments: utilMeta.arguments || [],
|
|
35
|
+
flags: utilMeta.flags || [],
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
if (context.flags.format === 'json') {
|
|
39
|
+
context.output.out(info);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
context.output.info(`Utility: ${info.name}`);
|
|
44
|
+
context.output.info('');
|
|
45
|
+
context.output.info(` Description: ${info.description}`);
|
|
46
|
+
context.output.info(` Type: ${info.type}`);
|
|
47
|
+
context.output.info(` Platforms: ${info.platforms.length > 0 ? info.platforms.join(', ') : '(all)'}`);
|
|
48
|
+
|
|
49
|
+
if (info.arguments.length > 0) {
|
|
50
|
+
context.output.info('');
|
|
51
|
+
context.output.info(' Arguments:');
|
|
52
|
+
for (const arg of info.arguments) {
|
|
53
|
+
const req = arg.required ? '(required)' : '(optional)';
|
|
54
|
+
context.output.info(` ${arg.name} ${req} - ${arg.description || ''}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (info.flags.length > 0) {
|
|
59
|
+
context.output.info('');
|
|
60
|
+
context.output.info(' Flags:');
|
|
61
|
+
for (const flag of info.flags) {
|
|
62
|
+
context.output.info(` --${flag.name} - ${flag.description || ''}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
module.exports = { meta, run };
|
package/src/commands/version.js
CHANGED
|
@@ -1,100 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* version command.
|
|
5
|
+
* Reads the version string from package.json and prints it.
|
|
6
|
+
* When format is json, outputs { version: "x.y.z" }.
|
|
7
|
+
* When table/tty, outputs just the version string.
|
|
6
8
|
*/
|
|
7
9
|
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
const meta = {
|
|
11
|
+
description: 'Show the current installed version',
|
|
12
|
+
arguments: [],
|
|
13
|
+
flags: []
|
|
14
|
+
};
|
|
11
15
|
|
|
12
16
|
/**
|
|
13
|
-
*
|
|
17
|
+
* Prints the current DevUtils CLI version.
|
|
18
|
+
*
|
|
19
|
+
* @param {object} args - Parsed command arguments (none expected).
|
|
20
|
+
* @param {object} context - The CLI context object with output, flags, etc.
|
|
14
21
|
*/
|
|
15
|
-
|
|
22
|
+
async function run(args, context) {
|
|
23
|
+
const pkg = require('../../package.json');
|
|
24
|
+
const version = pkg.version;
|
|
16
25
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
* @returns {string|null} The latest version string, or null if unable to fetch
|
|
20
|
-
*/
|
|
21
|
-
function getLatestVersion() {
|
|
22
|
-
try {
|
|
23
|
-
const result = execSync(`npm view ${PACKAGE_NAME} version`, {
|
|
24
|
-
encoding: 'utf8',
|
|
25
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
26
|
-
});
|
|
27
|
-
return result.trim();
|
|
28
|
-
} catch {
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Compare two semantic version strings
|
|
35
|
-
* @param {string} current - Current version (e.g., "1.2.3")
|
|
36
|
-
* @param {string} latest - Latest version (e.g., "1.2.4")
|
|
37
|
-
* @returns {boolean} True if latest is newer than current
|
|
38
|
-
*/
|
|
39
|
-
function isNewerVersion(current, latest) {
|
|
40
|
-
if (!current || !latest) {
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const currentParts = current.split('.').map(Number);
|
|
45
|
-
const latestParts = latest.split('.').map(Number);
|
|
46
|
-
|
|
47
|
-
for (let i = 0; i < 3; i++) {
|
|
48
|
-
const currentPart = currentParts[i] || 0;
|
|
49
|
-
const latestPart = latestParts[i] || 0;
|
|
50
|
-
|
|
51
|
-
if (latestPart > currentPart) {
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
if (latestPart < currentPart) {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Display version information and check for updates
|
|
64
|
-
* @param {object} options - Command options
|
|
65
|
-
*/
|
|
66
|
-
async function runVersion(options) {
|
|
67
|
-
const currentVersion = pkg.version;
|
|
68
|
-
|
|
69
|
-
console.log(`\n${pkg.name}`);
|
|
70
|
-
console.log('─'.repeat(40));
|
|
71
|
-
console.log(`Current version: ${currentVersion}`);
|
|
72
|
-
|
|
73
|
-
// Check for updates
|
|
74
|
-
console.log('\nChecking for updates...');
|
|
75
|
-
const latestVersion = getLatestVersion();
|
|
76
|
-
|
|
77
|
-
if (!latestVersion) {
|
|
78
|
-
console.log('Unable to check for updates (NPM registry unreachable)');
|
|
79
|
-
console.log('');
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (isNewerVersion(currentVersion, latestVersion)) {
|
|
84
|
-
console.log(`\nUpdate available: ${currentVersion} -> ${latestVersion}`);
|
|
85
|
-
console.log('\nTo update, run:');
|
|
86
|
-
console.log(' dev update');
|
|
87
|
-
console.log('');
|
|
26
|
+
if (context.flags.format === 'json') {
|
|
27
|
+
context.output.out({ version });
|
|
88
28
|
} else {
|
|
89
|
-
|
|
90
|
-
console.log('\nYou are running the latest version.');
|
|
91
|
-
console.log('');
|
|
29
|
+
context.output.info(version);
|
|
92
30
|
}
|
|
93
31
|
}
|
|
94
32
|
|
|
95
|
-
|
|
96
|
-
const version = new Command('version')
|
|
97
|
-
.description('Display current version and check for updates')
|
|
98
|
-
.action(runVersion);
|
|
99
|
-
|
|
100
|
-
module.exports = version;
|
|
33
|
+
module.exports = { meta, run };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Installer: <TOOL_NAME>
|
|
6
|
+
*
|
|
7
|
+
* Installs <TOOL_NAME> on supported platforms.
|
|
8
|
+
* See registry.json for platform support and dependencies.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Check if <TOOL_NAME> is already installed.
|
|
13
|
+
* @param {object} context - The CLI context object (has platform, shell, output, etc.)
|
|
14
|
+
* @returns {Promise<boolean>} true if the tool is available on the system
|
|
15
|
+
*/
|
|
16
|
+
async function isInstalled(context) {
|
|
17
|
+
// Use context.shell to check if the binary exists on the PATH.
|
|
18
|
+
// Example: return context.shell.commandExists('<binary-name>');
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Install on macOS using Homebrew.
|
|
24
|
+
* @param {object} context - The CLI context object
|
|
25
|
+
*/
|
|
26
|
+
async function install_macos(context) {
|
|
27
|
+
// Example: await context.shell.exec('brew install <tool>');
|
|
28
|
+
throw new Error('install_macos not implemented');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Install on Ubuntu using apt.
|
|
33
|
+
* @param {object} context - The CLI context object
|
|
34
|
+
*/
|
|
35
|
+
async function install_ubuntu(context) {
|
|
36
|
+
throw new Error('install_ubuntu not implemented');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Install on Raspberry Pi OS using apt.
|
|
41
|
+
* @param {object} context - The CLI context object
|
|
42
|
+
*/
|
|
43
|
+
async function install_raspbian(context) {
|
|
44
|
+
throw new Error('install_raspbian not implemented');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Install on Amazon Linux using dnf/yum.
|
|
49
|
+
* @param {object} context - The CLI context object
|
|
50
|
+
*/
|
|
51
|
+
async function install_amazon_linux(context) {
|
|
52
|
+
throw new Error('install_amazon_linux not implemented');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Install on Windows using Chocolatey or winget.
|
|
57
|
+
* @param {object} context - The CLI context object
|
|
58
|
+
*/
|
|
59
|
+
async function install_windows(context) {
|
|
60
|
+
throw new Error('install_windows not implemented');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Install in Git Bash (manual or portable install).
|
|
65
|
+
* @param {object} context - The CLI context object
|
|
66
|
+
*/
|
|
67
|
+
async function install_gitbash(context) {
|
|
68
|
+
throw new Error('install_gitbash not implemented');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Main install dispatcher. Detects the platform and calls the right function.
|
|
73
|
+
* The framework calls this -- you don't need to call it directly.
|
|
74
|
+
* @param {object} context - The CLI context object
|
|
75
|
+
*/
|
|
76
|
+
async function install(context) {
|
|
77
|
+
const platformType = context.platform.detect().type;
|
|
78
|
+
const installers = {
|
|
79
|
+
'macos': install_macos,
|
|
80
|
+
'ubuntu': install_ubuntu,
|
|
81
|
+
'raspbian': install_raspbian,
|
|
82
|
+
'amazon-linux': install_amazon_linux,
|
|
83
|
+
'windows': install_windows,
|
|
84
|
+
'gitbash': install_gitbash,
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const fn = installers[platformType];
|
|
88
|
+
if (!fn) {
|
|
89
|
+
throw new Error(`No installer for platform: ${platformType}`);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
await fn(context);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
module.exports = {
|
|
96
|
+
isInstalled,
|
|
97
|
+
install,
|
|
98
|
+
install_macos,
|
|
99
|
+
install_ubuntu,
|
|
100
|
+
install_raspbian,
|
|
101
|
+
install_amazon_linux,
|
|
102
|
+
install_windows,
|
|
103
|
+
install_gitbash,
|
|
104
|
+
};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Installer: git
|
|
6
|
+
*
|
|
7
|
+
* Installs git on all supported platforms.
|
|
8
|
+
* See registry.json for platform support and dependencies.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Check if git is already installed.
|
|
13
|
+
* @param {object} context - The CLI context object (has platform, shell, output, etc.)
|
|
14
|
+
* @returns {Promise<boolean>} true if git is available on the system
|
|
15
|
+
*/
|
|
16
|
+
async function isInstalled(context) {
|
|
17
|
+
return context.shell.commandExists('git');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Get the installed git version.
|
|
22
|
+
* @param {object} context - The CLI context object
|
|
23
|
+
* @returns {Promise<string|null>} Version string like '2.43.0', or null if unavailable.
|
|
24
|
+
*/
|
|
25
|
+
async function getVersion(context) {
|
|
26
|
+
try {
|
|
27
|
+
const result = await context.shell.exec('git --version');
|
|
28
|
+
// Output looks like: "git version 2.43.0" or "git version 2.43.0.windows.1"
|
|
29
|
+
const match = result.stdout.trim().match(/(\d+\.\d+\.\d+)/);
|
|
30
|
+
return match ? match[1] : null;
|
|
31
|
+
} catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Install git on macOS using Homebrew.
|
|
38
|
+
* @param {object} context - The CLI context object
|
|
39
|
+
*/
|
|
40
|
+
async function install_macos(context) {
|
|
41
|
+
if (!context.shell.commandExists('brew')) {
|
|
42
|
+
throw new Error(
|
|
43
|
+
'Homebrew is not installed. Run "dev tools install homebrew" first, or install git manually.'
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
await context.shell.exec('brew install git');
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Install git on Ubuntu using apt.
|
|
51
|
+
* @param {object} context - The CLI context object
|
|
52
|
+
*/
|
|
53
|
+
async function install_ubuntu(context) {
|
|
54
|
+
await context.shell.exec('sudo apt-get update');
|
|
55
|
+
await context.shell.exec('sudo apt-get install -y git');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Install git on Raspberry Pi OS using apt.
|
|
60
|
+
* @param {object} context - The CLI context object
|
|
61
|
+
*/
|
|
62
|
+
async function install_raspbian(context) {
|
|
63
|
+
await context.shell.exec('sudo apt-get update');
|
|
64
|
+
await context.shell.exec('sudo apt-get install -y git');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Install git on Amazon Linux using dnf or yum.
|
|
69
|
+
* @param {object} context - The CLI context object
|
|
70
|
+
*/
|
|
71
|
+
async function install_amazon_linux(context) {
|
|
72
|
+
const hasDnf = context.shell.commandExists('dnf');
|
|
73
|
+
if (hasDnf) {
|
|
74
|
+
await context.shell.exec('sudo dnf install -y git');
|
|
75
|
+
} else {
|
|
76
|
+
await context.shell.exec('sudo yum install -y git');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Install git on Windows using Chocolatey or winget.
|
|
82
|
+
* @param {object} context - The CLI context object
|
|
83
|
+
*/
|
|
84
|
+
async function install_windows(context) {
|
|
85
|
+
const hasChoco = context.shell.commandExists('choco');
|
|
86
|
+
const hasWinget = context.shell.commandExists('winget');
|
|
87
|
+
|
|
88
|
+
if (hasChoco) {
|
|
89
|
+
await context.shell.exec('choco install git -y');
|
|
90
|
+
} else if (hasWinget) {
|
|
91
|
+
await context.shell.exec(
|
|
92
|
+
'winget install --id Git.Git --accept-package-agreements --accept-source-agreements'
|
|
93
|
+
);
|
|
94
|
+
} else {
|
|
95
|
+
throw new Error(
|
|
96
|
+
'Neither Chocolatey nor winget is available. Install one of them first, or download git from https://git-scm.com'
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Install git in Git Bash. Git Bash ships with git, so this is a no-op.
|
|
103
|
+
* @param {object} context - The CLI context object
|
|
104
|
+
*/
|
|
105
|
+
async function install_gitbash(context) {
|
|
106
|
+
if (await isInstalled(context)) {
|
|
107
|
+
context.output.info('Git is already available in Git Bash.');
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// This shouldn't happen -- Git Bash IS git. But just in case:
|
|
111
|
+
throw new Error(
|
|
112
|
+
'Git not found in Git Bash environment. This is unexpected. Reinstall Git for Windows from https://git-scm.com'
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Main install dispatcher. Detects the platform and calls the right function.
|
|
118
|
+
* The framework calls this -- you don't need to call it directly.
|
|
119
|
+
* @param {object} context - The CLI context object
|
|
120
|
+
*/
|
|
121
|
+
async function install(context) {
|
|
122
|
+
const platformType = context.platform.detect().type;
|
|
123
|
+
const installers = {
|
|
124
|
+
'macos': install_macos,
|
|
125
|
+
'ubuntu': install_ubuntu,
|
|
126
|
+
'raspbian': install_raspbian,
|
|
127
|
+
'amazon-linux': install_amazon_linux,
|
|
128
|
+
'windows': install_windows,
|
|
129
|
+
'gitbash': install_gitbash,
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const fn = installers[platformType];
|
|
133
|
+
if (!fn) {
|
|
134
|
+
throw new Error(`No installer for platform: ${platformType}`);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
await fn(context);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
module.exports = {
|
|
141
|
+
isInstalled,
|
|
142
|
+
install,
|
|
143
|
+
getVersion,
|
|
144
|
+
install_macos,
|
|
145
|
+
install_ubuntu,
|
|
146
|
+
install_raspbian,
|
|
147
|
+
install_amazon_linux,
|
|
148
|
+
install_windows,
|
|
149
|
+
install_gitbash,
|
|
150
|
+
};
|