The previous loop used Bash glob expansion (lexicographic order) and stopped at the first match, so environments with multiple Node installs could select an older runtime (e.g. v18 before v22). Extract the nvm resolution into a shared scripts/pre-commit/resolve-node.sh that pipes `ls` output through `sort -V | tail -1` to select the semantically newest version. Both pre-commit and run-node-tool.sh now source the shared script, eliminating the duplicated logic.
37 lines
902 B
Bash
Executable File
37 lines
902 B
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
|
|
# Resolve node when not in PATH (e.g. nvm environments). Picks the newest
|
|
# installed nvm version using version-aware sort.
|
|
# shellcheck source=resolve-node.sh
|
|
source "$ROOT_DIR/scripts/pre-commit/resolve-node.sh"
|
|
|
|
if [[ $# -lt 1 ]]; then
|
|
echo "usage: run-node-tool.sh <tool> [args...]" >&2
|
|
exit 2
|
|
fi
|
|
|
|
tool="$1"
|
|
shift
|
|
|
|
if [[ -f "$ROOT_DIR/pnpm-lock.yaml" ]] && command -v pnpm >/dev/null 2>&1; then
|
|
exec pnpm exec "$tool" "$@"
|
|
fi
|
|
|
|
if { [[ -f "$ROOT_DIR/bun.lockb" ]] || [[ -f "$ROOT_DIR/bun.lock" ]]; } && command -v bun >/dev/null 2>&1; then
|
|
exec bunx --bun "$tool" "$@"
|
|
fi
|
|
|
|
if command -v npm >/dev/null 2>&1; then
|
|
exec npm exec -- "$tool" "$@"
|
|
fi
|
|
|
|
if command -v npx >/dev/null 2>&1; then
|
|
exec npx "$tool" "$@"
|
|
fi
|
|
|
|
echo "Missing package manager: pnpm, bun, or npm required." >&2
|
|
exit 1
|