Initial release
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
#!/bin/bash
|
||||
# HOT-Step CPP — macOS Development Mode
|
||||
#
|
||||
# Starts Vite dev server (hot-reload UI) + Node.js server (tsx watch).
|
||||
# Automatically finds a compatible Node.js.
|
||||
#
|
||||
# Usage:
|
||||
# ./dev.sh
|
||||
|
||||
set -e
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
ROOT_DIR="$(pwd)"
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════╗"
|
||||
echo "║ HOT-Step 9000 ⚡ DEV MODE ║"
|
||||
echo "║ Vite HMR + tsx watch ║"
|
||||
echo "╚══════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
# ── Find Node.js ────────────────────────────────────────────────────
|
||||
find_node() {
|
||||
if [ -x "${ROOT_DIR}/runtime/node" ]; then
|
||||
echo "${ROOT_DIR}/runtime"; return 0
|
||||
fi
|
||||
for bp in "/opt/homebrew/opt/node@22/bin" "/usr/local/opt/node@22/bin"; do
|
||||
if [ -x "${bp}/node" ]; then echo "$bp"; return 0; fi
|
||||
done
|
||||
if command -v node &>/dev/null; then
|
||||
local ver; ver="$(node --version 2>/dev/null | tr -d 'v')"
|
||||
local major="${ver%%.*}"
|
||||
if [ "$major" -ge 18 ] && [ "$major" -lt 24 ] 2>/dev/null; then
|
||||
echo "$(dirname "$(command -v node)")"; return 0
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
NODE_DIR=""
|
||||
if NODE_DIR=$(find_node); then
|
||||
export PATH="${NODE_DIR}:${PATH}"
|
||||
echo " Node.js: $(node --version)"
|
||||
else
|
||||
echo "❌ No compatible Node.js found (need 18-22)."
|
||||
echo " Fix: brew install node@22"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── Install deps if needed ───────────────────────────────────────────
|
||||
if [ ! -d "server/node_modules" ]; then
|
||||
echo "📦 Installing server dependencies..."
|
||||
cd server && npm install --loglevel=warn && cd ..
|
||||
fi
|
||||
if [ ! -d "ui/node_modules" ]; then
|
||||
echo "📦 Installing UI dependencies..."
|
||||
cd ui && npm install --loglevel=warn && cd ..
|
||||
fi
|
||||
|
||||
# ── Cleanup on exit ──────────────────────────────────────────────────
|
||||
cleanup() {
|
||||
echo ""
|
||||
echo "[dev.sh] Shutting down..."
|
||||
if [ -n "${VITE_PID}" ] && kill -0 "${VITE_PID}" 2>/dev/null; then
|
||||
kill "${VITE_PID}" 2>/dev/null || true
|
||||
echo "[dev.sh] Vite stopped"
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
# ── Start Vite (background) ─────────────────────────────────────────
|
||||
echo "🚀 Starting Vite dev server..."
|
||||
cd ui
|
||||
npx vite &
|
||||
VITE_PID=$!
|
||||
cd ..
|
||||
|
||||
sleep 2
|
||||
|
||||
# ── Start Node server (foreground) ──────────────────────────────────
|
||||
echo "🚀 Starting Node.js server..."
|
||||
echo " UI: http://localhost:3000 (Vite HMR)"
|
||||
echo " API: http://localhost:3001"
|
||||
echo ""
|
||||
cd server
|
||||
npx tsx watch src/index.ts
|
||||
Reference in New Issue
Block a user