@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
package/src/cli.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @fileoverview CLI setup using Commander.js
|
|
5
|
-
* Registers all commands and handles program execution.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const { program } = require('commander');
|
|
9
|
-
const pkg = require('../package.json');
|
|
10
|
-
|
|
11
|
-
const configureCommand = require('./commands/configure');
|
|
12
|
-
const statusCommand = require('./commands/status');
|
|
13
|
-
const identityCommand = require('./commands/identity');
|
|
14
|
-
const ignoreCommand = require('./commands/ignore');
|
|
15
|
-
const installCommand = require('./commands/install');
|
|
16
|
-
const versionCommand = require('./commands/version');
|
|
17
|
-
const updateCommand = require('./commands/update');
|
|
18
|
-
const { installCompletion, uninstallCompletion } = require('./completion');
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Run the CLI program
|
|
22
|
-
*/
|
|
23
|
-
function run() {
|
|
24
|
-
program
|
|
25
|
-
.name('dev')
|
|
26
|
-
.description('CLI toolkit for bootstrapping development environments')
|
|
27
|
-
.version(pkg.version, '-v, --version', 'Display version number');
|
|
28
|
-
|
|
29
|
-
// Global options
|
|
30
|
-
program
|
|
31
|
-
.option('--verbose', 'Enable verbose output')
|
|
32
|
-
.option('-q, --quiet', 'Suppress non-essential output')
|
|
33
|
-
.option('--no-color', 'Disable colored output');
|
|
34
|
-
|
|
35
|
-
// Add commands
|
|
36
|
-
program.addCommand(configureCommand);
|
|
37
|
-
program.addCommand(statusCommand);
|
|
38
|
-
program.addCommand(identityCommand);
|
|
39
|
-
program.addCommand(ignoreCommand);
|
|
40
|
-
program.addCommand(installCommand);
|
|
41
|
-
program.addCommand(versionCommand);
|
|
42
|
-
program.addCommand(updateCommand);
|
|
43
|
-
|
|
44
|
-
// Setup command - install essential tools
|
|
45
|
-
const setupCommand = require('./commands/setup');
|
|
46
|
-
program.addCommand(setupCommand);
|
|
47
|
-
|
|
48
|
-
// Completion management
|
|
49
|
-
const completion = program
|
|
50
|
-
.command('completion')
|
|
51
|
-
.description('Manage shell tab completion');
|
|
52
|
-
|
|
53
|
-
completion
|
|
54
|
-
.command('install')
|
|
55
|
-
.description('Install tab completion for your shell')
|
|
56
|
-
.action(installCompletion);
|
|
57
|
-
|
|
58
|
-
completion
|
|
59
|
-
.command('uninstall')
|
|
60
|
-
.description('Remove tab completion')
|
|
61
|
-
.action(uninstallCompletion);
|
|
62
|
-
|
|
63
|
-
// Parse and execute
|
|
64
|
-
program.parse(process.argv);
|
|
65
|
-
|
|
66
|
-
// If no command specified, show help
|
|
67
|
-
if (process.argv.length === 2) {
|
|
68
|
-
program.help();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
module.exports = { run };
|
package/src/commands/README.md
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# Commands
|
|
2
|
-
|
|
3
|
-
This folder contains the implementation logic for **Commands** — multi-word CLI operations invoked with the `dev` prefix.
|
|
4
|
-
|
|
5
|
-
## Structure
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
dev <action> [subcommand] [arguments] [options]
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Examples
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
dev configure # Configure developer profile
|
|
15
|
-
dev status # Show current configuration
|
|
16
|
-
dev install vscode # Install VS Code
|
|
17
|
-
dev ignore node # Add Node.js patterns to .gitignore
|
|
18
|
-
dev identity add # Add a new identity profile
|
|
19
|
-
dev identity remove # Remove an identity profile
|
|
20
|
-
dev identity link # Link identity to a source folder
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Files
|
|
24
|
-
|
|
25
|
-
| File | Command | Description |
|
|
26
|
-
|------|---------|-------------|
|
|
27
|
-
| `configure.js` | `dev configure` | Interactive configuration wizard |
|
|
28
|
-
| `status.js` | `dev status` | Display current configuration |
|
|
29
|
-
| `install.js` | `dev install <name>` | Install development tools |
|
|
30
|
-
| `ignore.js` | `dev ignore <technology>` | Append patterns to .gitignore |
|
|
31
|
-
| `identity.js` | `dev identity <action>` | Manage identity profiles (add, remove, link) |
|
|
32
|
-
|
|
33
|
-
## Related
|
|
34
|
-
|
|
35
|
-
- **Scripts** (`../scripts/`) — Standalone global utilities (e.g., `afk`, `clone`)
|
|
36
|
-
- **Installs** (`../installs/`) — Platform-specific installation logic
|
|
37
|
-
- **Utils** (`../utils/`) — Internal shared utilities
|
|
38
|
-
|
|
39
|
-
## Documentation
|
|
40
|
-
|
|
41
|
-
See [docs/COMMANDS.md](../../docs/COMMANDS.md) for the complete command specification.
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @fileoverview Configure command - Create the initial .devutils configuration
|
|
5
|
-
* file with user information.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const { Command } = require('commander');
|
|
9
|
-
const fs = require('fs');
|
|
10
|
-
const path = require('path');
|
|
11
|
-
const readline = require('readline');
|
|
12
|
-
|
|
13
|
-
const CONFIG_FILE = path.join(process.env.HOME || process.env.USERPROFILE, '.devutils');
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Create readline interface for prompts
|
|
17
|
-
* @returns {readline.Interface}
|
|
18
|
-
*/
|
|
19
|
-
function createPrompt() {
|
|
20
|
-
return readline.createInterface({
|
|
21
|
-
input: process.stdin,
|
|
22
|
-
output: process.stdout
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Prompt user for input
|
|
28
|
-
* @param {readline.Interface} rl - Readline interface
|
|
29
|
-
* @param {string} question - Question to ask
|
|
30
|
-
* @param {string} [defaultValue] - Default value if empty
|
|
31
|
-
* @returns {Promise<string>}
|
|
32
|
-
*/
|
|
33
|
-
function ask(rl, question, defaultValue) {
|
|
34
|
-
return new Promise(resolve => {
|
|
35
|
-
const prompt = defaultValue ? `${question} [${defaultValue}]: ` : `${question}: `;
|
|
36
|
-
rl.question(prompt, answer => {
|
|
37
|
-
resolve(answer.trim() || defaultValue || '');
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Prompt user for confirmation
|
|
44
|
-
* @param {readline.Interface} rl - Readline interface
|
|
45
|
-
* @param {string} question - Question to ask
|
|
46
|
-
* @returns {Promise<boolean>}
|
|
47
|
-
*/
|
|
48
|
-
function confirm(rl, question) {
|
|
49
|
-
return new Promise(resolve => {
|
|
50
|
-
rl.question(`${question} (y/n): `, answer => {
|
|
51
|
-
resolve(answer.toLowerCase().startsWith('y'));
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Load existing configuration
|
|
58
|
-
* @returns {object|null}
|
|
59
|
-
*/
|
|
60
|
-
function loadConfig() {
|
|
61
|
-
try {
|
|
62
|
-
if (fs.existsSync(CONFIG_FILE)) {
|
|
63
|
-
const content = fs.readFileSync(CONFIG_FILE, 'utf8');
|
|
64
|
-
return JSON.parse(content);
|
|
65
|
-
}
|
|
66
|
-
} catch (err) {
|
|
67
|
-
// Invalid JSON or read error
|
|
68
|
-
}
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Save configuration to file
|
|
74
|
-
* @param {object} config - Configuration object
|
|
75
|
-
*/
|
|
76
|
-
function saveConfig(config) {
|
|
77
|
-
fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\n');
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Display current configuration
|
|
82
|
-
* @param {object} config - Configuration object
|
|
83
|
-
*/
|
|
84
|
-
function displayConfig(config) {
|
|
85
|
-
console.log('\nCurrent Configuration:');
|
|
86
|
-
console.log('─'.repeat(40));
|
|
87
|
-
|
|
88
|
-
if (config.user) {
|
|
89
|
-
console.log('User:');
|
|
90
|
-
console.log(` Name: ${config.user.name || '(not set)'}`);
|
|
91
|
-
console.log(` Email: ${config.user.email || '(not set)'}`);
|
|
92
|
-
console.log(` URL: ${config.user.url || '(not set)'}`);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
console.log('\nConfig file:', CONFIG_FILE);
|
|
96
|
-
if (config.created) {
|
|
97
|
-
console.log(`Created: ${new Date(config.created).toLocaleString()}`);
|
|
98
|
-
}
|
|
99
|
-
if (config.updated) {
|
|
100
|
-
console.log(`Updated: ${new Date(config.updated).toLocaleString()}`);
|
|
101
|
-
}
|
|
102
|
-
console.log('');
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Run the configure command
|
|
107
|
-
* @param {object} options - Command options
|
|
108
|
-
*/
|
|
109
|
-
async function runConfigure(options) {
|
|
110
|
-
const existingConfig = loadConfig();
|
|
111
|
-
|
|
112
|
-
// Show existing config if requested
|
|
113
|
-
if (options.show) {
|
|
114
|
-
if (existingConfig) {
|
|
115
|
-
displayConfig(existingConfig);
|
|
116
|
-
} else {
|
|
117
|
-
console.log('\nNo configuration found.');
|
|
118
|
-
console.log(`Run 'dev configure' to create ${CONFIG_FILE}\n`);
|
|
119
|
-
}
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
let name = options.name;
|
|
124
|
-
let email = options.email;
|
|
125
|
-
let url = options.url;
|
|
126
|
-
|
|
127
|
-
// If all required params provided via CLI, skip interactive mode
|
|
128
|
-
const hasAllRequired = name && email;
|
|
129
|
-
|
|
130
|
-
if (!hasAllRequired) {
|
|
131
|
-
// Check for existing config
|
|
132
|
-
if (existingConfig && !options.force) {
|
|
133
|
-
console.log('\nExisting configuration found:');
|
|
134
|
-
displayConfig(existingConfig);
|
|
135
|
-
|
|
136
|
-
const rl = createPrompt();
|
|
137
|
-
const shouldUpdate = await confirm(rl, 'Do you want to update this configuration?');
|
|
138
|
-
rl.close();
|
|
139
|
-
|
|
140
|
-
if (!shouldUpdate) {
|
|
141
|
-
console.log('Configuration unchanged.');
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const rl = createPrompt();
|
|
147
|
-
|
|
148
|
-
console.log('\n--- Developer Profile Setup ---\n');
|
|
149
|
-
|
|
150
|
-
// Get user information (use CLI args as defaults if provided)
|
|
151
|
-
name = await ask(rl, 'Name (required)', name || existingConfig?.user?.name);
|
|
152
|
-
if (!name) {
|
|
153
|
-
console.error('\nError: Name is required.');
|
|
154
|
-
rl.close();
|
|
155
|
-
process.exit(1);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
email = await ask(rl, 'Email (required)', email || existingConfig?.user?.email);
|
|
159
|
-
if (!email) {
|
|
160
|
-
console.error('\nError: Email is required.');
|
|
161
|
-
rl.close();
|
|
162
|
-
process.exit(1);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
url = await ask(rl, 'URL (optional)', url || existingConfig?.user?.url);
|
|
166
|
-
|
|
167
|
-
rl.close();
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// Build config object
|
|
171
|
-
const now = new Date().toISOString();
|
|
172
|
-
const config = {
|
|
173
|
-
user: {
|
|
174
|
-
name,
|
|
175
|
-
email,
|
|
176
|
-
...(url && { url })
|
|
177
|
-
},
|
|
178
|
-
created: existingConfig?.created || now,
|
|
179
|
-
updated: now
|
|
180
|
-
};
|
|
181
|
-
|
|
182
|
-
// Save configuration
|
|
183
|
-
saveConfig(config);
|
|
184
|
-
|
|
185
|
-
console.log(`\nConfiguration saved to ${CONFIG_FILE}`);
|
|
186
|
-
displayConfig(config);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Create and configure the command
|
|
190
|
-
const configure = new Command('configure')
|
|
191
|
-
.description('Configure developer profile and create ~/.devutils')
|
|
192
|
-
.option('--name <name>', 'Developer name')
|
|
193
|
-
.option('--email <email>', 'Developer email')
|
|
194
|
-
.option('--url <url>', 'Developer URL (optional)')
|
|
195
|
-
.option('--force', 'Overwrite existing config without prompting')
|
|
196
|
-
.option('-s, --show', 'Display current configuration')
|
|
197
|
-
.action(runConfigure);
|
|
198
|
-
|
|
199
|
-
module.exports = configure;
|