89e443ab18
Nuevas funciones bash: gestión Gitea (create_repo, list_repos, add_collaborator, push_directory), install_android_sdk, install_mantine, frontend_doctor. Pipelines: capacitor_build_apk y gitea_init_app. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
151 lines
4.7 KiB
Bash
151 lines
4.7 KiB
Bash
# frontend_doctor
|
|
# ----------------
|
|
# Diagnostica la salud de un proyecto frontend Mantine.
|
|
# Verifica dependencias, configuracion y versiones.
|
|
# Imprime tabla de checks y retorna exit code 0 (ok) o 1 (fallos).
|
|
#
|
|
# USO (sourced):
|
|
# source frontend_doctor.sh
|
|
# frontend_doctor /path/to/frontend
|
|
#
|
|
# USO (directo):
|
|
# bash frontend_doctor.sh /path/to/frontend
|
|
|
|
frontend_doctor() {
|
|
local project_dir="$1"
|
|
local failures=0
|
|
|
|
if [ -z "$project_dir" ]; then
|
|
echo "frontend_doctor: se requiere project_dir" >&2
|
|
return 1
|
|
fi
|
|
|
|
if [ ! -f "$project_dir/package.json" ]; then
|
|
echo "frontend_doctor: no existe package.json en $project_dir" >&2
|
|
return 1
|
|
fi
|
|
|
|
echo "=== Frontend Doctor: $project_dir ==="
|
|
echo ""
|
|
|
|
# Helper: check y reportar
|
|
_check() {
|
|
local label="$1"
|
|
local ok="$2"
|
|
local detail="$3"
|
|
if [ "$ok" = "1" ]; then
|
|
printf " ✓ %-35s %s\n" "$label" "$detail"
|
|
else
|
|
printf " ✗ %-35s %s\n" "$label" "$detail"
|
|
((failures++))
|
|
fi
|
|
}
|
|
|
|
# 1. Node >= 18
|
|
local node_ver=""
|
|
local node_ok=0
|
|
if command -v node &>/dev/null; then
|
|
node_ver=$(node -v 2>/dev/null | sed 's/v//')
|
|
local node_major=$(echo "$node_ver" | cut -d. -f1)
|
|
[ "$node_major" -ge 18 ] 2>/dev/null && node_ok=1
|
|
fi
|
|
_check "Node >= 18" "$node_ok" "${node_ver:-not found}"
|
|
|
|
# 2. Package manager
|
|
local pm_ok=0
|
|
local pm_name="none"
|
|
if [ -f "$project_dir/pnpm-lock.yaml" ]; then
|
|
pm_name="pnpm"; pm_ok=1
|
|
elif [ -f "$project_dir/yarn.lock" ]; then
|
|
pm_name="yarn"; pm_ok=1
|
|
elif [ -f "$project_dir/package-lock.json" ]; then
|
|
pm_name="npm"; pm_ok=1
|
|
fi
|
|
_check "Package manager detected" "$pm_ok" "$pm_name"
|
|
|
|
# 3. node_modules existe
|
|
local nm_ok=0
|
|
[ -d "$project_dir/node_modules" ] && nm_ok=1
|
|
_check "node_modules present" "$nm_ok" ""
|
|
|
|
# 4. @mantine/core instalado
|
|
local mantine_ok=0
|
|
local mantine_ver=""
|
|
if [ -f "$project_dir/node_modules/@mantine/core/package.json" ]; then
|
|
mantine_ver=$(node -e "console.log(require('$project_dir/node_modules/@mantine/core/package.json').version)" 2>/dev/null)
|
|
mantine_ok=1
|
|
fi
|
|
_check "@mantine/core" "$mantine_ok" "${mantine_ver:-not installed}"
|
|
|
|
# 5. @mantine/hooks
|
|
local hooks_ok=0
|
|
[ -d "$project_dir/node_modules/@mantine/hooks" ] && hooks_ok=1
|
|
_check "@mantine/hooks" "$hooks_ok" ""
|
|
|
|
# 6. @mantine/charts
|
|
local charts_ok=0
|
|
[ -d "$project_dir/node_modules/@mantine/charts" ] && charts_ok=1
|
|
_check "@mantine/charts" "$charts_ok" ""
|
|
|
|
# 7. React >= 18
|
|
local react_ok=0
|
|
local react_ver=""
|
|
if [ -f "$project_dir/node_modules/react/package.json" ]; then
|
|
react_ver=$(node -e "console.log(require('$project_dir/node_modules/react/package.json').version)" 2>/dev/null)
|
|
local react_major=$(echo "$react_ver" | cut -d. -f1)
|
|
[ "$react_major" -ge 18 ] 2>/dev/null && react_ok=1
|
|
fi
|
|
_check "React >= 18" "$react_ok" "${react_ver:-not found}"
|
|
|
|
# 8. postcss.config presente
|
|
local postcss_ok=0
|
|
if [ -f "$project_dir/postcss.config.cjs" ] || [ -f "$project_dir/postcss.config.js" ] || [ -f "$project_dir/postcss.config.mjs" ]; then
|
|
postcss_ok=1
|
|
fi
|
|
_check "postcss.config present" "$postcss_ok" ""
|
|
|
|
# 9. TypeScript >= 5
|
|
local ts_ok=0
|
|
local ts_ver=""
|
|
if [ -f "$project_dir/node_modules/typescript/package.json" ]; then
|
|
ts_ver=$(node -e "console.log(require('$project_dir/node_modules/typescript/package.json').version)" 2>/dev/null)
|
|
local ts_major=$(echo "$ts_ver" | cut -d. -f1)
|
|
[ "$ts_major" -ge 5 ] 2>/dev/null && ts_ok=1
|
|
fi
|
|
_check "TypeScript >= 5" "$ts_ok" "${ts_ver:-not found}"
|
|
|
|
# 10. vite.config presente
|
|
local vite_ok=0
|
|
if [ -f "$project_dir/vite.config.ts" ] || [ -f "$project_dir/vite.config.js" ]; then
|
|
vite_ok=1
|
|
fi
|
|
_check "vite.config present" "$vite_ok" ""
|
|
|
|
# 11. Shadcn residual (warning)
|
|
local shadcn_clean=1
|
|
if [ -f "$project_dir/components.json" ]; then
|
|
shadcn_clean=0
|
|
fi
|
|
_check "No shadcn residual" "$shadcn_clean" "$([ "$shadcn_clean" = "0" ] && echo 'components.json found')"
|
|
|
|
# 12. @base-ui residual (warning)
|
|
local baseui_clean=1
|
|
if [ -d "$project_dir/node_modules/@base-ui" ]; then
|
|
baseui_clean=0
|
|
fi
|
|
_check "No @base-ui residual" "$baseui_clean" "$([ "$baseui_clean" = "0" ] && echo '@base-ui still installed')"
|
|
|
|
echo ""
|
|
if [ "$failures" -eq 0 ]; then
|
|
echo " Resultado: todo OK"
|
|
return 0
|
|
else
|
|
echo " Resultado: $failures problema(s) encontrado(s)"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
frontend_doctor "$@"
|
|
fi
|