#!/usr/bin/env sh set -eu app_env="$(printf '%s' "${APP_ENV:-development}" | tr '[:upper:]' '[:lower:]')" if [ -z "${VITE_DEVFRONT_PUBLIC_URL:-}" ] && [ -n "${DEVFRONT_URL:-}" ]; then export VITE_DEVFRONT_PUBLIC_URL="$DEVFRONT_URL" fi if [ -z "${VITE_DEVFRONT_PUBLIC_URL:-}" ] && [ -n "${DEVFRONT_CALLBACK_URLS:-}" ]; then first_devfront_callback="${DEVFRONT_CALLBACK_URLS%%,*}" case "$first_devfront_callback" in http://*/auth/callback | https://*/auth/callback) export VITE_DEVFRONT_PUBLIC_URL="${first_devfront_callback%/auth/callback}" ;; esac fi case "$app_env" in production|prod|stage|staging) mode="production" ;; *) mode="development" ;; esac if [ "${1:-}" = "--print-public-url" ]; then printf '%s\n' "${VITE_DEVFRONT_PUBLIC_URL:-}" exit 0 fi if [ "${1:-}" = "--print-mode" ]; then printf '%s\n' "$mode" exit 0 fi ensure_frontend_dependencies() { # If common workspace exists, manage dependencies from there if [ -d /common ] && [ -f /common/package.json ]; then WORKSPACE_DIR="/common" LOCK_FILE="/common/pnpm-lock.yaml" else WORKSPACE_DIR="." LOCK_FILE="package-lock.json" fi if [ ! -f "$WORKSPACE_DIR/package.json" ]; then return 0 fi if command -v sha256sum >/dev/null 2>&1; then deps_hash="$(sha256sum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" 2>/dev/null | sha256sum | awk '{print $1}')" else deps_hash="$(cksum "$WORKSPACE_DIR/package.json" "$LOCK_FILE" 2>/dev/null | cksum | awk '{print $1}')" fi deps_stamp="node_modules/.baron-deps-hash" installed_hash="$(cat "$deps_stamp" 2>/dev/null || true)" if [ "$installed_hash" != "$deps_hash" ]; then echo "Installing frontend dependencies..." if [ "$WORKSPACE_DIR" = "/common" ]; then npm install -g pnpm (cd /common && pnpm install) else npm ci fi mkdir -p node_modules printf '%s\n' "$deps_hash" > "$deps_stamp" fi } ensure_frontend_dependencies if [ "$mode" = "production" ]; then echo "Running in production mode with Vite preview..." exec sh -c "npm run build && npm run preview -- --host 0.0.0.0" fi echo "Running in development mode..." exec npm run dev -- --host 0.0.0.0