@fredlackey/devutils 0.0.18 → 0.0.19
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 +32 -150
- package/package.json +5 -82
- 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/cli.js +0 -72
- 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/commands/status.js +0 -223
- package/src/commands/update.js +0 -142
- package/src/commands/version.js +0 -100
- 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
|
@@ -1,399 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* get-course - Download a Pluralsight course using yt-dlp
|
|
5
|
-
*
|
|
6
|
-
* Migrated from legacy dotfiles alias.
|
|
7
|
-
* Original:
|
|
8
|
-
* get-course(){
|
|
9
|
-
* local usage="get-course %COURSE_NAME_FROM_URL% %USERNAME% %PASSWORD%";
|
|
10
|
-
* local course="$1";
|
|
11
|
-
* local username="$2";
|
|
12
|
-
* local password="$3";
|
|
13
|
-
* local prefix="";
|
|
14
|
-
* if [ -e "/usr/local/bin/yt-dlp" ]; then
|
|
15
|
-
* prefix="/usr/local/bin/";
|
|
16
|
-
* fi
|
|
17
|
-
* if [ -z "$course" ]; then
|
|
18
|
-
* echo "Problem getting Pluralisight course: Course name not supplied"
|
|
19
|
-
* echo "$usage"
|
|
20
|
-
* elif [ -z "$username" ]; then
|
|
21
|
-
* echo "Problem getting Pluralisight course: Username not supplied"
|
|
22
|
-
* echo "$usage"
|
|
23
|
-
* elif [ -z "$password" ]; then
|
|
24
|
-
* echo "Problem getting Pluralisight course: Password not supplied"
|
|
25
|
-
* echo "$usage"
|
|
26
|
-
* else
|
|
27
|
-
* eval "${prefix}yt-dlp --verbose --username $username --password $password --rate-limit 50K --sleep-interval 600 -o \"%(autonumber)s - %(title)s.%(ext)s\" \"https://app.pluralsight.com/library/courses/${course}\""
|
|
28
|
-
* fi
|
|
29
|
-
* }
|
|
30
|
-
*
|
|
31
|
-
* This script downloads a course from Pluralsight using yt-dlp with:
|
|
32
|
-
* - Authentication via username/password
|
|
33
|
-
* - Rate limiting (50KB/s) to avoid detection
|
|
34
|
-
* - Sleep intervals (600 seconds) between downloads
|
|
35
|
-
* - Verbose output for debugging
|
|
36
|
-
* - Numbered filenames with course titles
|
|
37
|
-
*
|
|
38
|
-
* @module scripts/get-course
|
|
39
|
-
*/
|
|
40
|
-
|
|
41
|
-
const os = require('../utils/common/os');
|
|
42
|
-
const shell = require('../utils/common/shell');
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Usage string displayed when required arguments are missing.
|
|
46
|
-
* Shows the expected format for invoking the command.
|
|
47
|
-
*/
|
|
48
|
-
const USAGE = 'get-course <course-name-from-url> <username> <password>';
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Checks if yt-dlp is installed on the system.
|
|
52
|
-
* Uses the shell utility's pure Node.js implementation to locate the executable.
|
|
53
|
-
*
|
|
54
|
-
* @returns {boolean} True if yt-dlp is found in PATH, false otherwise
|
|
55
|
-
*/
|
|
56
|
-
function isYtDlpInstalled() {
|
|
57
|
-
return shell.commandExists('yt-dlp');
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Displays an error message with installation instructions for yt-dlp.
|
|
62
|
-
* Instructions vary by platform to show the appropriate package manager.
|
|
63
|
-
*
|
|
64
|
-
* @param {string} platformType - The detected platform type (macos, ubuntu, etc.)
|
|
65
|
-
*/
|
|
66
|
-
function showYtDlpInstallInstructions(platformType) {
|
|
67
|
-
console.error('Error: yt-dlp is required but not installed.');
|
|
68
|
-
console.error('');
|
|
69
|
-
|
|
70
|
-
// Show platform-specific installation instructions
|
|
71
|
-
switch (platformType) {
|
|
72
|
-
case 'macos':
|
|
73
|
-
console.error('Install it with:');
|
|
74
|
-
console.error(' brew install yt-dlp');
|
|
75
|
-
break;
|
|
76
|
-
case 'ubuntu':
|
|
77
|
-
case 'debian':
|
|
78
|
-
case 'raspbian':
|
|
79
|
-
console.error('Install it with:');
|
|
80
|
-
console.error(' sudo apt install yt-dlp');
|
|
81
|
-
console.error('');
|
|
82
|
-
console.error('Or install via pip for the latest version:');
|
|
83
|
-
console.error(' pip install yt-dlp');
|
|
84
|
-
break;
|
|
85
|
-
case 'amazon_linux':
|
|
86
|
-
case 'rhel':
|
|
87
|
-
case 'fedora':
|
|
88
|
-
console.error('Install it with:');
|
|
89
|
-
console.error(' pip install yt-dlp');
|
|
90
|
-
console.error('');
|
|
91
|
-
console.error('Or on Fedora:');
|
|
92
|
-
console.error(' sudo dnf install yt-dlp');
|
|
93
|
-
break;
|
|
94
|
-
case 'windows':
|
|
95
|
-
case 'cmd':
|
|
96
|
-
case 'powershell':
|
|
97
|
-
console.error('Install it with:');
|
|
98
|
-
console.error(' winget install yt-dlp');
|
|
99
|
-
console.error('');
|
|
100
|
-
console.error('Or with Chocolatey:');
|
|
101
|
-
console.error(' choco install yt-dlp');
|
|
102
|
-
break;
|
|
103
|
-
case 'gitbash':
|
|
104
|
-
console.error('Install it with:');
|
|
105
|
-
console.error(' Download from: https://github.com/yt-dlp/yt-dlp/releases');
|
|
106
|
-
console.error(' Or use: pip install yt-dlp');
|
|
107
|
-
break;
|
|
108
|
-
default:
|
|
109
|
-
console.error('Install it from: https://github.com/yt-dlp/yt-dlp');
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Validates the command line arguments.
|
|
115
|
-
* Checks that course name, username, and password are all provided.
|
|
116
|
-
*
|
|
117
|
-
* @param {string[]} args - Command line arguments [course, username, password]
|
|
118
|
-
* @returns {{ valid: boolean, course?: string, username?: string, password?: string, error?: string }}
|
|
119
|
-
*/
|
|
120
|
-
function validateArgs(args) {
|
|
121
|
-
const [course, username, password] = args;
|
|
122
|
-
|
|
123
|
-
if (!course || course.trim() === '') {
|
|
124
|
-
return {
|
|
125
|
-
valid: false,
|
|
126
|
-
error: 'Problem getting Pluralsight course: Course name not supplied'
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (!username || username.trim() === '') {
|
|
131
|
-
return {
|
|
132
|
-
valid: false,
|
|
133
|
-
error: 'Problem getting Pluralsight course: Username not supplied'
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if (!password || password.trim() === '') {
|
|
138
|
-
return {
|
|
139
|
-
valid: false,
|
|
140
|
-
error: 'Problem getting Pluralsight course: Password not supplied'
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
return {
|
|
145
|
-
valid: true,
|
|
146
|
-
course: course.trim(),
|
|
147
|
-
username: username.trim(),
|
|
148
|
-
password: password.trim()
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Pure Node.js implementation for downloading Pluralsight courses.
|
|
154
|
-
*
|
|
155
|
-
* This function uses yt-dlp which is a cross-platform tool, so the same
|
|
156
|
-
* command works on all operating systems. The implementation validates
|
|
157
|
-
* arguments, checks for yt-dlp, and then spawns the download process.
|
|
158
|
-
*
|
|
159
|
-
* Since yt-dlp provides the actual download functionality and works
|
|
160
|
-
* identically across platforms, all platform-specific functions delegate
|
|
161
|
-
* to this implementation.
|
|
162
|
-
*
|
|
163
|
-
* @param {string[]} args - Command line arguments [course, username, password]
|
|
164
|
-
* @param {string} platformType - The detected platform type (for error messages)
|
|
165
|
-
* @returns {Promise<void>}
|
|
166
|
-
*/
|
|
167
|
-
async function do_get_course_nodejs(args, platformType = 'unknown') {
|
|
168
|
-
// Step 1: Validate arguments
|
|
169
|
-
const validation = validateArgs(args);
|
|
170
|
-
if (!validation.valid) {
|
|
171
|
-
console.error(validation.error);
|
|
172
|
-
console.error(USAGE);
|
|
173
|
-
process.exit(1);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// Step 2: Check if yt-dlp is installed
|
|
177
|
-
if (!isYtDlpInstalled()) {
|
|
178
|
-
showYtDlpInstallInstructions(platformType);
|
|
179
|
-
process.exit(1);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Step 3: Build the Pluralsight URL
|
|
183
|
-
const { course, username, password } = validation;
|
|
184
|
-
const courseUrl = `https://app.pluralsight.com/library/courses/${course}`;
|
|
185
|
-
|
|
186
|
-
// Step 4: Build yt-dlp arguments
|
|
187
|
-
// Using the same parameters as the original bash function:
|
|
188
|
-
// --verbose: Show detailed output for debugging
|
|
189
|
-
// --username/--password: Pluralsight authentication
|
|
190
|
-
// --rate-limit 50K: Limit download speed to 50KB/s to avoid detection
|
|
191
|
-
// --sleep-interval 600: Wait 600 seconds (10 minutes) between each video
|
|
192
|
-
// -o: Output template with auto-numbering and title
|
|
193
|
-
const ytdlpArgs = [
|
|
194
|
-
'--verbose',
|
|
195
|
-
'--username', username,
|
|
196
|
-
'--password', password,
|
|
197
|
-
'--rate-limit', '50K',
|
|
198
|
-
'--sleep-interval', '600',
|
|
199
|
-
'-o', '%(autonumber)s - %(title)s.%(ext)s',
|
|
200
|
-
courseUrl
|
|
201
|
-
];
|
|
202
|
-
|
|
203
|
-
console.log(`Downloading Pluralsight course: ${course}`);
|
|
204
|
-
console.log('');
|
|
205
|
-
console.log('Note: This process uses rate limiting and sleep intervals to avoid detection.');
|
|
206
|
-
console.log(' Videos will be downloaded slowly with 10-minute pauses between each.');
|
|
207
|
-
console.log('');
|
|
208
|
-
|
|
209
|
-
// Step 5: Execute yt-dlp with streaming output
|
|
210
|
-
// We use spawnAsync to show real-time progress from yt-dlp
|
|
211
|
-
const result = await shell.spawnAsync('yt-dlp', ytdlpArgs, {
|
|
212
|
-
onStdout: (data) => process.stdout.write(data),
|
|
213
|
-
onStderr: (data) => process.stderr.write(data)
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
if (result.code !== 0) {
|
|
217
|
-
console.error('');
|
|
218
|
-
console.error('Error: yt-dlp exited with code', result.code);
|
|
219
|
-
console.error('');
|
|
220
|
-
console.error('Common issues:');
|
|
221
|
-
console.error(' - Invalid username or password');
|
|
222
|
-
console.error(' - Course name is incorrect (check the URL)');
|
|
223
|
-
console.error(' - Your Pluralsight subscription may not include this course');
|
|
224
|
-
console.error(' - yt-dlp may need to be updated: pip install -U yt-dlp');
|
|
225
|
-
process.exit(result.code);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
console.log('');
|
|
229
|
-
console.log('Download complete!');
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Downloads a Pluralsight course on macOS.
|
|
234
|
-
*
|
|
235
|
-
* Uses the shared Node.js implementation since yt-dlp works identically
|
|
236
|
-
* across all platforms. The only macOS-specific aspect is the installation
|
|
237
|
-
* instructions shown if yt-dlp is missing (recommends Homebrew).
|
|
238
|
-
*
|
|
239
|
-
* @param {string[]} args - Command line arguments [course, username, password]
|
|
240
|
-
* @returns {Promise<void>}
|
|
241
|
-
*/
|
|
242
|
-
async function do_get_course_macos(args) {
|
|
243
|
-
return do_get_course_nodejs(args, 'macos');
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
/**
|
|
247
|
-
* Downloads a Pluralsight course on Ubuntu.
|
|
248
|
-
*
|
|
249
|
-
* Uses the shared Node.js implementation since yt-dlp works identically
|
|
250
|
-
* across all platforms. The only Ubuntu-specific aspect is the installation
|
|
251
|
-
* instructions shown if yt-dlp is missing (recommends apt or pip).
|
|
252
|
-
*
|
|
253
|
-
* @param {string[]} args - Command line arguments [course, username, password]
|
|
254
|
-
* @returns {Promise<void>}
|
|
255
|
-
*/
|
|
256
|
-
async function do_get_course_ubuntu(args) {
|
|
257
|
-
return do_get_course_nodejs(args, 'ubuntu');
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* Downloads a Pluralsight course on Raspberry Pi OS.
|
|
262
|
-
*
|
|
263
|
-
* Uses the shared Node.js implementation since yt-dlp works identically
|
|
264
|
-
* across all platforms. On Raspberry Pi, downloads may be slower due to
|
|
265
|
-
* hardware limitations, but the rate limiting is already conservative.
|
|
266
|
-
*
|
|
267
|
-
* @param {string[]} args - Command line arguments [course, username, password]
|
|
268
|
-
* @returns {Promise<void>}
|
|
269
|
-
*/
|
|
270
|
-
async function do_get_course_raspbian(args) {
|
|
271
|
-
return do_get_course_nodejs(args, 'raspbian');
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Downloads a Pluralsight course on Amazon Linux.
|
|
276
|
-
*
|
|
277
|
-
* Uses the shared Node.js implementation since yt-dlp works identically
|
|
278
|
-
* across all platforms. On Amazon Linux, yt-dlp is typically installed via pip.
|
|
279
|
-
*
|
|
280
|
-
* @param {string[]} args - Command line arguments [course, username, password]
|
|
281
|
-
* @returns {Promise<void>}
|
|
282
|
-
*/
|
|
283
|
-
async function do_get_course_amazon_linux(args) {
|
|
284
|
-
return do_get_course_nodejs(args, 'amazon_linux');
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
/**
|
|
288
|
-
* Downloads a Pluralsight course on Windows Command Prompt.
|
|
289
|
-
*
|
|
290
|
-
* Uses the shared Node.js implementation since yt-dlp works identically
|
|
291
|
-
* across all platforms. On Windows, yt-dlp can be installed via winget
|
|
292
|
-
* or Chocolatey.
|
|
293
|
-
*
|
|
294
|
-
* @param {string[]} args - Command line arguments [course, username, password]
|
|
295
|
-
* @returns {Promise<void>}
|
|
296
|
-
*/
|
|
297
|
-
async function do_get_course_cmd(args) {
|
|
298
|
-
return do_get_course_nodejs(args, 'cmd');
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
/**
|
|
302
|
-
* Downloads a Pluralsight course on Windows PowerShell.
|
|
303
|
-
*
|
|
304
|
-
* Uses the shared Node.js implementation since yt-dlp works identically
|
|
305
|
-
* across all platforms. The behavior is the same as CMD.
|
|
306
|
-
*
|
|
307
|
-
* @param {string[]} args - Command line arguments [course, username, password]
|
|
308
|
-
* @returns {Promise<void>}
|
|
309
|
-
*/
|
|
310
|
-
async function do_get_course_powershell(args) {
|
|
311
|
-
return do_get_course_nodejs(args, 'powershell');
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
/**
|
|
315
|
-
* Downloads a Pluralsight course in Git Bash on Windows.
|
|
316
|
-
*
|
|
317
|
-
* Uses the shared Node.js implementation since yt-dlp works identically
|
|
318
|
-
* across all platforms. Git Bash provides a Unix-like environment on Windows.
|
|
319
|
-
*
|
|
320
|
-
* @param {string[]} args - Command line arguments [course, username, password]
|
|
321
|
-
* @returns {Promise<void>}
|
|
322
|
-
*/
|
|
323
|
-
async function do_get_course_gitbash(args) {
|
|
324
|
-
return do_get_course_nodejs(args, 'gitbash');
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/**
|
|
328
|
-
* Main entry point - detects environment and executes appropriate implementation.
|
|
329
|
-
*
|
|
330
|
-
* Downloads a course from Pluralsight using yt-dlp with authentication,
|
|
331
|
-
* rate limiting, and sleep intervals to avoid detection. The course name
|
|
332
|
-
* should be extracted from the Pluralsight course URL.
|
|
333
|
-
*
|
|
334
|
-
* Example:
|
|
335
|
-
* For URL: https://app.pluralsight.com/library/courses/javascript-fundamentals
|
|
336
|
-
* Use course name: javascript-fundamentals
|
|
337
|
-
*
|
|
338
|
-
* Usage:
|
|
339
|
-
* get-course <course-name-from-url> <username> <password>
|
|
340
|
-
*
|
|
341
|
-
* Downloaded files are saved to the current directory with format:
|
|
342
|
-
* 01 - Introduction.mp4
|
|
343
|
-
* 02 - Getting Started.mp4
|
|
344
|
-
* etc.
|
|
345
|
-
*
|
|
346
|
-
* @param {string[]} args - Command line arguments [course, username, password]
|
|
347
|
-
* @returns {Promise<void>}
|
|
348
|
-
*/
|
|
349
|
-
async function do_get_course(args) {
|
|
350
|
-
const platform = os.detect();
|
|
351
|
-
|
|
352
|
-
const handlers = {
|
|
353
|
-
'macos': do_get_course_macos,
|
|
354
|
-
'ubuntu': do_get_course_ubuntu,
|
|
355
|
-
'debian': do_get_course_ubuntu,
|
|
356
|
-
'raspbian': do_get_course_raspbian,
|
|
357
|
-
'amazon_linux': do_get_course_amazon_linux,
|
|
358
|
-
'rhel': do_get_course_amazon_linux,
|
|
359
|
-
'fedora': do_get_course_ubuntu,
|
|
360
|
-
'linux': do_get_course_ubuntu,
|
|
361
|
-
'wsl': do_get_course_ubuntu,
|
|
362
|
-
'cmd': do_get_course_cmd,
|
|
363
|
-
'windows': do_get_course_cmd,
|
|
364
|
-
'powershell': do_get_course_powershell,
|
|
365
|
-
'gitbash': do_get_course_gitbash
|
|
366
|
-
};
|
|
367
|
-
|
|
368
|
-
const handler = handlers[platform.type];
|
|
369
|
-
if (!handler) {
|
|
370
|
-
console.error(`Platform '${platform.type}' is not supported for this command.`);
|
|
371
|
-
console.error('');
|
|
372
|
-
console.error('Supported platforms:');
|
|
373
|
-
console.error(' - macOS');
|
|
374
|
-
console.error(' - Ubuntu, Debian, and other Linux distributions');
|
|
375
|
-
console.error(' - Raspberry Pi OS');
|
|
376
|
-
console.error(' - Amazon Linux, RHEL, Fedora');
|
|
377
|
-
console.error(' - Windows (CMD, PowerShell, Git Bash)');
|
|
378
|
-
process.exit(1);
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
await handler(args);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
module.exports = {
|
|
385
|
-
main: do_get_course,
|
|
386
|
-
do_get_course,
|
|
387
|
-
do_get_course_nodejs,
|
|
388
|
-
do_get_course_macos,
|
|
389
|
-
do_get_course_ubuntu,
|
|
390
|
-
do_get_course_raspbian,
|
|
391
|
-
do_get_course_amazon_linux,
|
|
392
|
-
do_get_course_cmd,
|
|
393
|
-
do_get_course_powershell,
|
|
394
|
-
do_get_course_gitbash
|
|
395
|
-
};
|
|
396
|
-
|
|
397
|
-
if (require.main === module) {
|
|
398
|
-
do_get_course(process.argv.slice(2));
|
|
399
|
-
}
|
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* get-dependencies - Extract dependency names from package.json
|
|
5
|
-
*
|
|
6
|
-
* Migrated from legacy dotfiles function.
|
|
7
|
-
* Original:
|
|
8
|
-
* get-dependencies() {
|
|
9
|
-
* local package_json_path="$1"
|
|
10
|
-
* local dependency_type_prefix="${2:-dependencies}"
|
|
11
|
-
* ...
|
|
12
|
-
* dependencies=$(jq -r --arg depType "$dependency_type" '.[$depType] | keys[]?' "$package_json_path")
|
|
13
|
-
* echo "$dependencies"
|
|
14
|
-
* }
|
|
15
|
-
*
|
|
16
|
-
* This script reads a package.json file and extracts the names of dependencies
|
|
17
|
-
* from a specified dependency type (dependencies, devDependencies, etc.).
|
|
18
|
-
* Unlike the original bash implementation that required jq, this Node.js version
|
|
19
|
-
* uses native JSON parsing and works on all platforms without external tools.
|
|
20
|
-
*
|
|
21
|
-
* @module scripts/get-dependencies
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
const fs = require('fs');
|
|
25
|
-
const path = require('path');
|
|
26
|
-
const os = require('../utils/common/os');
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Pure Node.js implementation that extracts dependency names from package.json.
|
|
30
|
-
*
|
|
31
|
-
* This function reads a package.json file and outputs the names of packages
|
|
32
|
-
* from the specified dependency type. It works identically on all platforms
|
|
33
|
-
* because it only uses Node.js built-in modules (fs for file reading and
|
|
34
|
-
* JSON.parse for parsing).
|
|
35
|
-
*
|
|
36
|
-
* Why this is better than the original bash implementation:
|
|
37
|
-
* - No external dependency on jq (which must be installed separately)
|
|
38
|
-
* - Consistent behavior across all operating systems
|
|
39
|
-
* - Better error messages with specific file/JSON parsing details
|
|
40
|
-
* - Native JSON parsing is more reliable than command-line jq
|
|
41
|
-
*
|
|
42
|
-
* @param {string[]} args - Command line arguments
|
|
43
|
-
* @param {string} args[0] - Path to package.json file (required)
|
|
44
|
-
* @param {string} [args[1]] - Dependency type prefix: "dev", "peer", "opt", "bundle", or "dependencies" (default: "dependencies")
|
|
45
|
-
* @returns {Promise<void>}
|
|
46
|
-
*/
|
|
47
|
-
async function do_get_dependencies_nodejs(args) {
|
|
48
|
-
const packageJsonPath = args[0];
|
|
49
|
-
const dependencyTypePrefix = args[1] || 'dependencies';
|
|
50
|
-
|
|
51
|
-
// Validate that a path was provided
|
|
52
|
-
if (!packageJsonPath) {
|
|
53
|
-
console.error('Usage: get-dependencies /path/to/package.json [dependency_type]');
|
|
54
|
-
console.error('');
|
|
55
|
-
console.error('Dependency types:');
|
|
56
|
-
console.error(' dependencies - Production dependencies (default)');
|
|
57
|
-
console.error(' dev - Development dependencies');
|
|
58
|
-
console.error(' peer - Peer dependencies');
|
|
59
|
-
console.error(' opt - Optional dependencies');
|
|
60
|
-
console.error(' bundle - Bundled dependencies');
|
|
61
|
-
console.error('');
|
|
62
|
-
console.error('Examples:');
|
|
63
|
-
console.error(' get-dependencies ./package.json');
|
|
64
|
-
console.error(' get-dependencies ./package.json dev');
|
|
65
|
-
console.error(' get-dependencies ../other/package.json peer');
|
|
66
|
-
process.exit(1);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Resolve the path (handle relative and absolute paths)
|
|
70
|
-
// Use process.cwd() to resolve relative paths from where the command is run
|
|
71
|
-
const resolvedPath = path.isAbsolute(packageJsonPath)
|
|
72
|
-
? packageJsonPath
|
|
73
|
-
: path.resolve(process.cwd(), packageJsonPath);
|
|
74
|
-
|
|
75
|
-
// Check if the file exists
|
|
76
|
-
if (!fs.existsSync(resolvedPath)) {
|
|
77
|
-
console.error(`Error: File not found: ${resolvedPath}`);
|
|
78
|
-
process.exit(1);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Map the prefix to the full dependency type name
|
|
82
|
-
// This matches the original bash implementation's case statement
|
|
83
|
-
const dependencyTypeMap = {
|
|
84
|
-
'dependencies': 'dependencies',
|
|
85
|
-
'dev': 'devDependencies',
|
|
86
|
-
'peer': 'peerDependencies',
|
|
87
|
-
'opt': 'optionalDependencies',
|
|
88
|
-
'bundle': 'bundledDependencies'
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
const dependencyType = dependencyTypeMap[dependencyTypePrefix];
|
|
92
|
-
|
|
93
|
-
// Validate the dependency type prefix
|
|
94
|
-
if (!dependencyType) {
|
|
95
|
-
console.error(`Error: Invalid dependency type prefix: ${dependencyTypePrefix}`);
|
|
96
|
-
console.error('');
|
|
97
|
-
console.error('Valid prefixes are:');
|
|
98
|
-
console.error(' dependencies - Production dependencies');
|
|
99
|
-
console.error(' dev - Development dependencies');
|
|
100
|
-
console.error(' peer - Peer dependencies');
|
|
101
|
-
console.error(' opt - Optional dependencies');
|
|
102
|
-
console.error(' bundle - Bundled dependencies');
|
|
103
|
-
process.exit(1);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// Read and parse the package.json file
|
|
107
|
-
let packageJson;
|
|
108
|
-
try {
|
|
109
|
-
const fileContents = fs.readFileSync(resolvedPath, 'utf8');
|
|
110
|
-
packageJson = JSON.parse(fileContents);
|
|
111
|
-
} catch (error) {
|
|
112
|
-
// Distinguish between read errors and parse errors for better debugging
|
|
113
|
-
if (error.code === 'ENOENT') {
|
|
114
|
-
console.error(`Error: File not found: ${resolvedPath}`);
|
|
115
|
-
} else if (error.code === 'EACCES') {
|
|
116
|
-
console.error(`Error: Permission denied reading: ${resolvedPath}`);
|
|
117
|
-
} else if (error instanceof SyntaxError) {
|
|
118
|
-
console.error(`Error: Invalid JSON in ${resolvedPath}`);
|
|
119
|
-
console.error(` ${error.message}`);
|
|
120
|
-
} else {
|
|
121
|
-
console.error(`Error reading file: ${error.message}`);
|
|
122
|
-
}
|
|
123
|
-
process.exit(1);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Check if the dependency type exists in the package.json
|
|
127
|
-
// If it doesn't exist or is null/undefined, silently exit with success
|
|
128
|
-
// This matches the original bash behavior: return 0 if node doesn't exist
|
|
129
|
-
const dependencies = packageJson[dependencyType];
|
|
130
|
-
if (!dependencies || typeof dependencies !== 'object') {
|
|
131
|
-
// No dependencies of this type - this is not an error, just empty output
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Extract and output the dependency names (keys of the dependencies object)
|
|
136
|
-
// Each name is printed on its own line, matching the original jq output format
|
|
137
|
-
const dependencyNames = Object.keys(dependencies);
|
|
138
|
-
|
|
139
|
-
// If there are no dependencies, silently exit (matches original behavior)
|
|
140
|
-
if (dependencyNames.length === 0) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Print each dependency name on its own line
|
|
145
|
-
// This format matches the original: jq -r '.[$depType] | keys[]?'
|
|
146
|
-
for (const name of dependencyNames) {
|
|
147
|
-
console.log(name);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Extract dependency names on macOS.
|
|
153
|
-
*
|
|
154
|
-
* Delegates to the pure Node.js implementation since JSON parsing
|
|
155
|
-
* works identically on all platforms.
|
|
156
|
-
*
|
|
157
|
-
* @param {string[]} args - Command line arguments
|
|
158
|
-
* @returns {Promise<void>}
|
|
159
|
-
*/
|
|
160
|
-
async function do_get_dependencies_macos(args) {
|
|
161
|
-
return do_get_dependencies_nodejs(args);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Extract dependency names on Ubuntu.
|
|
166
|
-
*
|
|
167
|
-
* Delegates to the pure Node.js implementation since JSON parsing
|
|
168
|
-
* works identically on all platforms.
|
|
169
|
-
*
|
|
170
|
-
* @param {string[]} args - Command line arguments
|
|
171
|
-
* @returns {Promise<void>}
|
|
172
|
-
*/
|
|
173
|
-
async function do_get_dependencies_ubuntu(args) {
|
|
174
|
-
return do_get_dependencies_nodejs(args);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Extract dependency names on Raspberry Pi OS.
|
|
179
|
-
*
|
|
180
|
-
* Delegates to the pure Node.js implementation since JSON parsing
|
|
181
|
-
* works identically on all platforms.
|
|
182
|
-
*
|
|
183
|
-
* @param {string[]} args - Command line arguments
|
|
184
|
-
* @returns {Promise<void>}
|
|
185
|
-
*/
|
|
186
|
-
async function do_get_dependencies_raspbian(args) {
|
|
187
|
-
return do_get_dependencies_nodejs(args);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Extract dependency names on Amazon Linux.
|
|
192
|
-
*
|
|
193
|
-
* Delegates to the pure Node.js implementation since JSON parsing
|
|
194
|
-
* works identically on all platforms.
|
|
195
|
-
*
|
|
196
|
-
* @param {string[]} args - Command line arguments
|
|
197
|
-
* @returns {Promise<void>}
|
|
198
|
-
*/
|
|
199
|
-
async function do_get_dependencies_amazon_linux(args) {
|
|
200
|
-
return do_get_dependencies_nodejs(args);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Extract dependency names on Windows Command Prompt.
|
|
205
|
-
*
|
|
206
|
-
* Delegates to the pure Node.js implementation since JSON parsing
|
|
207
|
-
* works identically on all platforms.
|
|
208
|
-
*
|
|
209
|
-
* @param {string[]} args - Command line arguments
|
|
210
|
-
* @returns {Promise<void>}
|
|
211
|
-
*/
|
|
212
|
-
async function do_get_dependencies_cmd(args) {
|
|
213
|
-
return do_get_dependencies_nodejs(args);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Extract dependency names on Windows PowerShell.
|
|
218
|
-
*
|
|
219
|
-
* Delegates to the pure Node.js implementation since JSON parsing
|
|
220
|
-
* works identically on all platforms.
|
|
221
|
-
*
|
|
222
|
-
* @param {string[]} args - Command line arguments
|
|
223
|
-
* @returns {Promise<void>}
|
|
224
|
-
*/
|
|
225
|
-
async function do_get_dependencies_powershell(args) {
|
|
226
|
-
return do_get_dependencies_nodejs(args);
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Extract dependency names in Git Bash on Windows.
|
|
231
|
-
*
|
|
232
|
-
* Delegates to the pure Node.js implementation since JSON parsing
|
|
233
|
-
* works identically on all platforms.
|
|
234
|
-
*
|
|
235
|
-
* @param {string[]} args - Command line arguments
|
|
236
|
-
* @returns {Promise<void>}
|
|
237
|
-
*/
|
|
238
|
-
async function do_get_dependencies_gitbash(args) {
|
|
239
|
-
return do_get_dependencies_nodejs(args);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Main entry point - detects environment and executes appropriate implementation.
|
|
244
|
-
*
|
|
245
|
-
* Extracts and lists dependency names from a package.json file. The output
|
|
246
|
-
* is a list of package names (one per line), which can be piped to other
|
|
247
|
-
* commands or used in scripts.
|
|
248
|
-
*
|
|
249
|
-
* This is useful for:
|
|
250
|
-
* - Auditing what packages are installed
|
|
251
|
-
* - Copying dependencies from one project to another
|
|
252
|
-
* - Comparing dependencies between projects
|
|
253
|
-
* - Scripting package installation workflows
|
|
254
|
-
*
|
|
255
|
-
* Examples:
|
|
256
|
-
* get-dependencies ./package.json # List production dependencies
|
|
257
|
-
* get-dependencies ./package.json dev # List devDependencies
|
|
258
|
-
* get-dependencies ../lib/package.json peer # List peerDependencies
|
|
259
|
-
*
|
|
260
|
-
* @param {string[]} args - Command line arguments
|
|
261
|
-
* @returns {Promise<void>}
|
|
262
|
-
*/
|
|
263
|
-
async function do_get_dependencies(args) {
|
|
264
|
-
const platform = os.detect();
|
|
265
|
-
|
|
266
|
-
const handlers = {
|
|
267
|
-
'macos': do_get_dependencies_macos,
|
|
268
|
-
'ubuntu': do_get_dependencies_ubuntu,
|
|
269
|
-
'debian': do_get_dependencies_ubuntu,
|
|
270
|
-
'raspbian': do_get_dependencies_raspbian,
|
|
271
|
-
'amazon_linux': do_get_dependencies_amazon_linux,
|
|
272
|
-
'rhel': do_get_dependencies_amazon_linux,
|
|
273
|
-
'fedora': do_get_dependencies_ubuntu,
|
|
274
|
-
'linux': do_get_dependencies_ubuntu,
|
|
275
|
-
'wsl': do_get_dependencies_ubuntu,
|
|
276
|
-
'cmd': do_get_dependencies_cmd,
|
|
277
|
-
'windows': do_get_dependencies_cmd,
|
|
278
|
-
'powershell': do_get_dependencies_powershell,
|
|
279
|
-
'gitbash': do_get_dependencies_gitbash
|
|
280
|
-
};
|
|
281
|
-
|
|
282
|
-
const handler = handlers[platform.type];
|
|
283
|
-
if (!handler) {
|
|
284
|
-
console.error(`Platform '${platform.type}' is not supported for this command.`);
|
|
285
|
-
process.exit(1);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
await handler(args);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
module.exports = {
|
|
292
|
-
main: do_get_dependencies,
|
|
293
|
-
do_get_dependencies,
|
|
294
|
-
do_get_dependencies_nodejs,
|
|
295
|
-
do_get_dependencies_macos,
|
|
296
|
-
do_get_dependencies_ubuntu,
|
|
297
|
-
do_get_dependencies_raspbian,
|
|
298
|
-
do_get_dependencies_amazon_linux,
|
|
299
|
-
do_get_dependencies_cmd,
|
|
300
|
-
do_get_dependencies_powershell,
|
|
301
|
-
do_get_dependencies_gitbash
|
|
302
|
-
};
|
|
303
|
-
|
|
304
|
-
if (require.main === module) {
|
|
305
|
-
do_get_dependencies(process.argv.slice(2));
|
|
306
|
-
}
|