@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/scripts/datauri.js
DELETED
|
@@ -1,389 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* datauri - Convert a file to a base64-encoded data URI string
|
|
5
|
-
*
|
|
6
|
-
* Migrated from legacy dotfiles function.
|
|
7
|
-
* Original:
|
|
8
|
-
* datauri() {
|
|
9
|
-
* local mimeType=""
|
|
10
|
-
* if [ ! -f "$1" ]; then
|
|
11
|
-
* printf "%s is not a file.\n" "$1"
|
|
12
|
-
* return
|
|
13
|
-
* fi
|
|
14
|
-
* mimeType=$(file --brief --mime-type "$1")
|
|
15
|
-
* if [[ $mimeType == text/* ]]; then
|
|
16
|
-
* mimeType="$mimeType;charset=utf-8"
|
|
17
|
-
* fi
|
|
18
|
-
* printf "data:%s;base64,%s" \
|
|
19
|
-
* "$mimeType" \
|
|
20
|
-
* "$(openssl base64 -in "$1" | tr -d "\n")"
|
|
21
|
-
* }
|
|
22
|
-
*
|
|
23
|
-
* This script converts any file to a data URI format that can be embedded
|
|
24
|
-
* directly in HTML, CSS, or other documents. Data URIs are useful for:
|
|
25
|
-
* - Embedding small images directly in HTML/CSS
|
|
26
|
-
* - Avoiding additional HTTP requests
|
|
27
|
-
* - Creating self-contained HTML files
|
|
28
|
-
*
|
|
29
|
-
* @module scripts/datauri
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
const fs = require('fs');
|
|
33
|
-
const path = require('path');
|
|
34
|
-
const os = require('../utils/common/os');
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* A mapping of common file extensions to their MIME types.
|
|
38
|
-
* This allows pure Node.js MIME type detection without external dependencies.
|
|
39
|
-
*
|
|
40
|
-
* The mapping covers the most common file types used in web development,
|
|
41
|
-
* images, documents, and media files.
|
|
42
|
-
*/
|
|
43
|
-
const MIME_TYPES = {
|
|
44
|
-
// Images
|
|
45
|
-
'.png': 'image/png',
|
|
46
|
-
'.jpg': 'image/jpeg',
|
|
47
|
-
'.jpeg': 'image/jpeg',
|
|
48
|
-
'.gif': 'image/gif',
|
|
49
|
-
'.webp': 'image/webp',
|
|
50
|
-
'.svg': 'image/svg+xml',
|
|
51
|
-
'.ico': 'image/x-icon',
|
|
52
|
-
'.bmp': 'image/bmp',
|
|
53
|
-
'.tiff': 'image/tiff',
|
|
54
|
-
'.tif': 'image/tiff',
|
|
55
|
-
'.avif': 'image/avif',
|
|
56
|
-
|
|
57
|
-
// Audio
|
|
58
|
-
'.mp3': 'audio/mpeg',
|
|
59
|
-
'.wav': 'audio/wav',
|
|
60
|
-
'.ogg': 'audio/ogg',
|
|
61
|
-
'.m4a': 'audio/mp4',
|
|
62
|
-
'.flac': 'audio/flac',
|
|
63
|
-
'.aac': 'audio/aac',
|
|
64
|
-
'.weba': 'audio/webm',
|
|
65
|
-
|
|
66
|
-
// Video
|
|
67
|
-
'.mp4': 'video/mp4',
|
|
68
|
-
'.webm': 'video/webm',
|
|
69
|
-
'.ogv': 'video/ogg',
|
|
70
|
-
'.avi': 'video/x-msvideo',
|
|
71
|
-
'.mov': 'video/quicktime',
|
|
72
|
-
'.mkv': 'video/x-matroska',
|
|
73
|
-
|
|
74
|
-
// Fonts
|
|
75
|
-
'.woff': 'font/woff',
|
|
76
|
-
'.woff2': 'font/woff2',
|
|
77
|
-
'.ttf': 'font/ttf',
|
|
78
|
-
'.otf': 'font/otf',
|
|
79
|
-
'.eot': 'application/vnd.ms-fontobject',
|
|
80
|
-
|
|
81
|
-
// Text/Code
|
|
82
|
-
'.html': 'text/html',
|
|
83
|
-
'.htm': 'text/html',
|
|
84
|
-
'.css': 'text/css',
|
|
85
|
-
'.js': 'text/javascript',
|
|
86
|
-
'.mjs': 'text/javascript',
|
|
87
|
-
'.json': 'application/json',
|
|
88
|
-
'.xml': 'application/xml',
|
|
89
|
-
'.txt': 'text/plain',
|
|
90
|
-
'.md': 'text/markdown',
|
|
91
|
-
'.csv': 'text/csv',
|
|
92
|
-
'.yaml': 'text/yaml',
|
|
93
|
-
'.yml': 'text/yaml',
|
|
94
|
-
'.ts': 'text/typescript',
|
|
95
|
-
'.tsx': 'text/typescript',
|
|
96
|
-
'.jsx': 'text/javascript',
|
|
97
|
-
|
|
98
|
-
// Documents
|
|
99
|
-
'.pdf': 'application/pdf',
|
|
100
|
-
'.doc': 'application/msword',
|
|
101
|
-
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
102
|
-
'.xls': 'application/vnd.ms-excel',
|
|
103
|
-
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
104
|
-
'.ppt': 'application/vnd.ms-powerpoint',
|
|
105
|
-
'.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
106
|
-
|
|
107
|
-
// Archives
|
|
108
|
-
'.zip': 'application/zip',
|
|
109
|
-
'.tar': 'application/x-tar',
|
|
110
|
-
'.gz': 'application/gzip',
|
|
111
|
-
'.rar': 'application/vnd.rar',
|
|
112
|
-
'.7z': 'application/x-7z-compressed',
|
|
113
|
-
|
|
114
|
-
// Other
|
|
115
|
-
'.wasm': 'application/wasm',
|
|
116
|
-
'.bin': 'application/octet-stream'
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Get the MIME type for a file based on its extension.
|
|
121
|
-
*
|
|
122
|
-
* This function uses a built-in mapping of file extensions to MIME types,
|
|
123
|
-
* which is faster and more portable than calling external tools like `file`.
|
|
124
|
-
* Falls back to 'application/octet-stream' for unknown extensions.
|
|
125
|
-
*
|
|
126
|
-
* @param {string} filePath - The path to the file
|
|
127
|
-
* @returns {string} The MIME type for the file
|
|
128
|
-
*/
|
|
129
|
-
function getMimeType(filePath) {
|
|
130
|
-
const ext = path.extname(filePath).toLowerCase();
|
|
131
|
-
return MIME_TYPES[ext] || 'application/octet-stream';
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Check if a MIME type represents text content.
|
|
136
|
-
*
|
|
137
|
-
* Text content should have charset=utf-8 appended to the MIME type
|
|
138
|
-
* in data URIs for proper character encoding.
|
|
139
|
-
*
|
|
140
|
-
* @param {string} mimeType - The MIME type to check
|
|
141
|
-
* @returns {boolean} True if the MIME type is text-based
|
|
142
|
-
*/
|
|
143
|
-
function isTextMimeType(mimeType) {
|
|
144
|
-
// Text types start with 'text/'
|
|
145
|
-
if (mimeType.startsWith('text/')) {
|
|
146
|
-
return true;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Some application types are also text-based
|
|
150
|
-
const textApplicationTypes = [
|
|
151
|
-
'application/json',
|
|
152
|
-
'application/xml',
|
|
153
|
-
'application/javascript',
|
|
154
|
-
'application/x-javascript'
|
|
155
|
-
];
|
|
156
|
-
|
|
157
|
-
return textApplicationTypes.includes(mimeType);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Pure Node.js implementation that works on any platform.
|
|
162
|
-
*
|
|
163
|
-
* This function reads a file, detects its MIME type based on extension,
|
|
164
|
-
* encodes the content as base64, and outputs a complete data URI string.
|
|
165
|
-
*
|
|
166
|
-
* The data URI format is: data:[<mediatype>][;base64],<data>
|
|
167
|
-
*
|
|
168
|
-
* For text content, we append ;charset=utf-8 to the MIME type to ensure
|
|
169
|
-
* proper character encoding, matching the original bash function behavior.
|
|
170
|
-
*
|
|
171
|
-
* @param {string[]} args - Command line arguments, expects file path as first element
|
|
172
|
-
* @returns {Promise<void>}
|
|
173
|
-
*/
|
|
174
|
-
async function do_datauri_nodejs(args) {
|
|
175
|
-
// Check if a file path was provided
|
|
176
|
-
if (!args || args.length === 0) {
|
|
177
|
-
console.error('Usage: datauri <file>');
|
|
178
|
-
console.error('');
|
|
179
|
-
console.error('Convert a file to a base64-encoded data URI string.');
|
|
180
|
-
console.error('');
|
|
181
|
-
console.error('Example:');
|
|
182
|
-
console.error(' datauri image.png');
|
|
183
|
-
console.error(' datauri styles.css');
|
|
184
|
-
process.exit(1);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
const filePath = args[0];
|
|
188
|
-
|
|
189
|
-
// Resolve the file path (handles relative paths)
|
|
190
|
-
const resolvedPath = path.resolve(filePath);
|
|
191
|
-
|
|
192
|
-
// Check if the file exists
|
|
193
|
-
if (!fs.existsSync(resolvedPath)) {
|
|
194
|
-
console.error(`${filePath} is not a file.`);
|
|
195
|
-
process.exit(1);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// Check if it's actually a file (not a directory)
|
|
199
|
-
const stats = fs.statSync(resolvedPath);
|
|
200
|
-
if (!stats.isFile()) {
|
|
201
|
-
console.error(`${filePath} is not a file.`);
|
|
202
|
-
process.exit(1);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// Get the MIME type based on file extension
|
|
206
|
-
let mimeType = getMimeType(resolvedPath);
|
|
207
|
-
|
|
208
|
-
// For text content, append charset=utf-8 (matching original bash behavior)
|
|
209
|
-
if (isTextMimeType(mimeType)) {
|
|
210
|
-
mimeType = `${mimeType};charset=utf-8`;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// Read the file contents as a Buffer
|
|
214
|
-
const fileBuffer = fs.readFileSync(resolvedPath);
|
|
215
|
-
|
|
216
|
-
// Convert to base64 string
|
|
217
|
-
const base64Data = fileBuffer.toString('base64');
|
|
218
|
-
|
|
219
|
-
// Output the complete data URI
|
|
220
|
-
// Using process.stdout.write to avoid trailing newline (matching original printf behavior)
|
|
221
|
-
process.stdout.write(`data:${mimeType};base64,${base64Data}`);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* Convert a file to data URI on macOS.
|
|
226
|
-
*
|
|
227
|
-
* macOS can use the pure Node.js implementation since file reading,
|
|
228
|
-
* MIME type detection, and base64 encoding all work identically.
|
|
229
|
-
*
|
|
230
|
-
* @param {string[]} args - Command line arguments
|
|
231
|
-
* @returns {Promise<void>}
|
|
232
|
-
*/
|
|
233
|
-
async function do_datauri_macos(args) {
|
|
234
|
-
return do_datauri_nodejs(args);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* Convert a file to data URI on Ubuntu.
|
|
239
|
-
*
|
|
240
|
-
* Ubuntu can use the pure Node.js implementation since file reading,
|
|
241
|
-
* MIME type detection, and base64 encoding all work identically.
|
|
242
|
-
*
|
|
243
|
-
* @param {string[]} args - Command line arguments
|
|
244
|
-
* @returns {Promise<void>}
|
|
245
|
-
*/
|
|
246
|
-
async function do_datauri_ubuntu(args) {
|
|
247
|
-
return do_datauri_nodejs(args);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Convert a file to data URI on Raspberry Pi OS.
|
|
252
|
-
*
|
|
253
|
-
* Raspberry Pi OS can use the pure Node.js implementation since file reading,
|
|
254
|
-
* MIME type detection, and base64 encoding all work identically.
|
|
255
|
-
*
|
|
256
|
-
* @param {string[]} args - Command line arguments
|
|
257
|
-
* @returns {Promise<void>}
|
|
258
|
-
*/
|
|
259
|
-
async function do_datauri_raspbian(args) {
|
|
260
|
-
return do_datauri_nodejs(args);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Convert a file to data URI on Amazon Linux.
|
|
265
|
-
*
|
|
266
|
-
* Amazon Linux can use the pure Node.js implementation since file reading,
|
|
267
|
-
* MIME type detection, and base64 encoding all work identically.
|
|
268
|
-
*
|
|
269
|
-
* @param {string[]} args - Command line arguments
|
|
270
|
-
* @returns {Promise<void>}
|
|
271
|
-
*/
|
|
272
|
-
async function do_datauri_amazon_linux(args) {
|
|
273
|
-
return do_datauri_nodejs(args);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
/**
|
|
277
|
-
* Convert a file to data URI on Windows Command Prompt.
|
|
278
|
-
*
|
|
279
|
-
* Windows CMD can use the pure Node.js implementation since file reading,
|
|
280
|
-
* MIME type detection, and base64 encoding all work identically.
|
|
281
|
-
* Node.js handles path separators and file system differences automatically.
|
|
282
|
-
*
|
|
283
|
-
* @param {string[]} args - Command line arguments
|
|
284
|
-
* @returns {Promise<void>}
|
|
285
|
-
*/
|
|
286
|
-
async function do_datauri_cmd(args) {
|
|
287
|
-
return do_datauri_nodejs(args);
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
/**
|
|
291
|
-
* Convert a file to data URI on Windows PowerShell.
|
|
292
|
-
*
|
|
293
|
-
* Windows PowerShell can use the pure Node.js implementation since file reading,
|
|
294
|
-
* MIME type detection, and base64 encoding all work identically.
|
|
295
|
-
* Node.js handles path separators and file system differences automatically.
|
|
296
|
-
*
|
|
297
|
-
* @param {string[]} args - Command line arguments
|
|
298
|
-
* @returns {Promise<void>}
|
|
299
|
-
*/
|
|
300
|
-
async function do_datauri_powershell(args) {
|
|
301
|
-
return do_datauri_nodejs(args);
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
/**
|
|
305
|
-
* Convert a file to data URI on Git Bash.
|
|
306
|
-
*
|
|
307
|
-
* Git Bash can use the pure Node.js implementation since file reading,
|
|
308
|
-
* MIME type detection, and base64 encoding all work identically.
|
|
309
|
-
* Node.js handles path separators and file system differences automatically.
|
|
310
|
-
*
|
|
311
|
-
* @param {string[]} args - Command line arguments
|
|
312
|
-
* @returns {Promise<void>}
|
|
313
|
-
*/
|
|
314
|
-
async function do_datauri_gitbash(args) {
|
|
315
|
-
return do_datauri_nodejs(args);
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
/**
|
|
319
|
-
* Main entry point - detects environment and executes appropriate implementation.
|
|
320
|
-
*
|
|
321
|
-
* The "datauri" command converts any file to a base64-encoded data URI string.
|
|
322
|
-
* Data URIs embed file contents directly in the string, useful for:
|
|
323
|
-
* - Embedding small images in HTML img src or CSS background-image
|
|
324
|
-
* - Avoiding additional HTTP requests for small resources
|
|
325
|
-
* - Creating self-contained HTML documents
|
|
326
|
-
*
|
|
327
|
-
* Usage: datauri <file>
|
|
328
|
-
*
|
|
329
|
-
* Example output:
|
|
330
|
-
* datauri image.png
|
|
331
|
-
* => data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...
|
|
332
|
-
*
|
|
333
|
-
* datauri styles.css
|
|
334
|
-
* => data:text/css;charset=utf-8;base64,LyogU3R5bGVz...
|
|
335
|
-
*
|
|
336
|
-
* @param {string[]} args - Command line arguments, expects file path as first element
|
|
337
|
-
* @returns {Promise<void>}
|
|
338
|
-
*/
|
|
339
|
-
async function do_datauri(args) {
|
|
340
|
-
const platform = os.detect();
|
|
341
|
-
|
|
342
|
-
const handlers = {
|
|
343
|
-
'macos': do_datauri_macos,
|
|
344
|
-
'ubuntu': do_datauri_ubuntu,
|
|
345
|
-
'debian': do_datauri_ubuntu,
|
|
346
|
-
'raspbian': do_datauri_raspbian,
|
|
347
|
-
'amazon_linux': do_datauri_amazon_linux,
|
|
348
|
-
'rhel': do_datauri_amazon_linux,
|
|
349
|
-
'fedora': do_datauri_ubuntu,
|
|
350
|
-
'linux': do_datauri_ubuntu,
|
|
351
|
-
'wsl': do_datauri_ubuntu,
|
|
352
|
-
'cmd': do_datauri_cmd,
|
|
353
|
-
'windows': do_datauri_cmd,
|
|
354
|
-
'powershell': do_datauri_powershell,
|
|
355
|
-
'gitbash': do_datauri_gitbash
|
|
356
|
-
};
|
|
357
|
-
|
|
358
|
-
const handler = handlers[platform.type];
|
|
359
|
-
if (!handler) {
|
|
360
|
-
console.error(`Platform '${platform.type}' is not supported for this command.`);
|
|
361
|
-
console.error('');
|
|
362
|
-
console.error('Supported platforms:');
|
|
363
|
-
console.error(' - macOS');
|
|
364
|
-
console.error(' - Ubuntu, Debian, and other Linux distributions');
|
|
365
|
-
console.error(' - Raspberry Pi OS');
|
|
366
|
-
console.error(' - Amazon Linux');
|
|
367
|
-
console.error(' - Windows (CMD, PowerShell, Git Bash)');
|
|
368
|
-
process.exit(1);
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
await handler(args);
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
module.exports = {
|
|
375
|
-
main: do_datauri,
|
|
376
|
-
do_datauri,
|
|
377
|
-
do_datauri_nodejs,
|
|
378
|
-
do_datauri_macos,
|
|
379
|
-
do_datauri_ubuntu,
|
|
380
|
-
do_datauri_raspbian,
|
|
381
|
-
do_datauri_amazon_linux,
|
|
382
|
-
do_datauri_cmd,
|
|
383
|
-
do_datauri_powershell,
|
|
384
|
-
do_datauri_gitbash
|
|
385
|
-
};
|
|
386
|
-
|
|
387
|
-
if (require.main === module) {
|
|
388
|
-
do_datauri(process.argv.slice(2));
|
|
389
|
-
}
|