73 lines
2.0 KiB
Bash
Executable File
73 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -u
|
|
|
|
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
REPO_ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd -P)"
|
|
FRONTEND_DIR="$REPO_ROOT/frontend"
|
|
|
|
node_version_supported() {
|
|
local version="$1"
|
|
local major
|
|
local minor
|
|
|
|
[[ "$version" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+) ]] || return 1
|
|
major=$((10#${BASH_REMATCH[1]}))
|
|
minor=$((10#${BASH_REMATCH[2]}))
|
|
(( (major == 20 && minor >= 19) || (major == 22 && minor >= 12) || major >= 23 ))
|
|
}
|
|
|
|
if [[ ! -f "$FRONTEND_DIR/package.json" ]]; then
|
|
echo "[ERROR] Frontend package.json was not found:" >&2
|
|
echo " $FRONTEND_DIR/package.json" >&2
|
|
exit 1
|
|
fi
|
|
|
|
NODE_EXE=""
|
|
NPM_EXE=""
|
|
for candidate in "$REPO_ROOT"/.tools/node-*-linux-x64/bin; do
|
|
if [[ -x "$candidate/node" && -x "$candidate/npm" ]]; then
|
|
CANDIDATE_VERSION="$("$candidate/node" --version 2>/dev/null || true)"
|
|
if node_version_supported "$CANDIDATE_VERSION"; then
|
|
NODE_EXE="$candidate/node"
|
|
NPM_EXE="$candidate/npm"
|
|
PATH="$candidate:${PATH:-}"
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
export PATH
|
|
|
|
if [[ -z "$NODE_EXE" ]]; then
|
|
NODE_EXE="$(command -v node || true)"
|
|
NPM_EXE="$(command -v npm || true)"
|
|
fi
|
|
|
|
if [[ -z "$NODE_EXE" || -z "$NPM_EXE" ]]; then
|
|
echo "[ERROR] Node.js and npm were not found." >&2
|
|
echo "Install Node.js 20.19+ or 22.12+ and make node/npm available on PATH." >&2
|
|
exit 1
|
|
fi
|
|
|
|
NODE_VERSION="$("$NODE_EXE" --version 2>/dev/null || true)"
|
|
if ! node_version_supported "$NODE_VERSION"; then
|
|
echo "[ERROR] Unsupported Node.js version: $NODE_VERSION" >&2
|
|
echo "Vite requires Node.js 20.19+ or 22.12+ (Node.js 21 is not supported)." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -x "$FRONTEND_DIR/node_modules/.bin/vite" ]]; then
|
|
echo "[ERROR] Frontend dependencies are not installed." >&2
|
|
echo "Run the following command first:" >&2
|
|
echo " cd \"$FRONTEND_DIR\" && \"$NPM_EXE\" ci" >&2
|
|
exit 1
|
|
fi
|
|
|
|
cd "$FRONTEND_DIR"
|
|
|
|
echo "Starting ReactFlow at http://127.0.0.1:5173"
|
|
echo "Press Ctrl+C to stop the service."
|
|
echo
|
|
|
|
exec "$NPM_EXE" run dev -- --strictPort
|