Files
rc-compat/bash-setup-scripts/dynamic-route-healthcheck.sh
T

108 lines
2.8 KiB
Bash
Executable File

#!/bin/zsh
echo "🔎 Running Next.js Dynamic Route Health Check..."
echo ""
DYNAMIC_PAGES=$(find src/app -type f -path "*/\[*\]/page.js")
RED=$(tput setaf 1)
YELLOW=$(tput setaf 3)
GREEN=$(tput setaf 2)
RESET=$(tput sgr0)
check_pass() {
echo "${GREEN}✔ PASS${RESET} $1"
}
check_warn() {
echo "${YELLOW}⚠ WARN${RESET} $1"
}
check_fail() {
echo "${RED}✖ FAIL${RESET} $1"
}
for FILE in $DYNAMIC_PAGES; do
echo "=========================================="
echo "📄 Checking: $FILE"
FOLDER=$(basename $(dirname "$FILE"))
PARAM_NAME=${FOLDER//[\[\]]/}
CONTENT=$(cat "$FILE")
echo "➡ Route param is: ${PARAM_NAME}"
# 1. Check for export default async
if echo "$CONTENT" | grep -q "export default async function"; then
check_pass "Has async default export"
else
check_fail "Missing 'export default async function'"
fi
# 2. Check for await params
if echo "$CONTENT" | grep -q "await params"; then
check_pass "'await params' found"
else
check_fail "Missing 'await params' — required in Next.js 15+"
fi
# 3. Check if extracted param name is correct
if echo "$CONTENT" | grep -q "const { $PARAM_NAME } = await params"; then
check_pass "Correct param extraction: { $PARAM_NAME }"
else
check_warn "Param '$PARAM_NAME' may not be extracted with 'await params'"
fi
# 4. Check for leftover bad usage: params.paramName
if echo "$CONTENT" | grep -q "params\.$PARAM_NAME"; then
check_fail "Found old syntax 'params.$PARAM_NAME' — must be removed!"
else
check_pass "No old 'params.$PARAM_NAME' references"
fi
# 5. Check that param is used somewhere
if echo "$CONTENT" | grep -q "$PARAM_NAME"; then
check_pass "Param is referenced in file"
else
check_warn "Param '$PARAM_NAME' isn't used — this may be incorrect"
fi
# 6. Validate imports
IMPORT_ERRORS=0
while IFS= read -r line; do
if [[ "$line" == import* ]]; then
PATH=$(echo "$line" | sed -n 's/.*from "\(.*\)".*/\1/p')
if [[ "$PATH" == @/* ]]; then
# Attempt resolution
RESOLVED="src${PATH#@}"
RESOLVED="${RESOLVED%.js}.js"
if [ ! -f "$RESOLVED" ] && [ ! -f "${RESOLVED%.js}.jsx" ] && [ ! -f "${RESOLVED%.js}.ts" ] && [ ! -f "${RESOLVED%.js}.tsx" ]; then
check_warn "Import may be broken: $line"
IMPORT_ERRORS=1
fi
fi
fi
done <<< "$(grep "^import" "$FILE")"
if [[ $IMPORT_ERRORS -eq 0 ]]; then
check_pass "All imports appear valid"
fi
# 7. Check param folder structure
DIR=$(dirname "$FILE")
if [ ! -d "$DIR" ]; then
check_fail "Missing directory: $DIR (route broken)"
else
check_pass "Route directory exists"
fi
echo ""
done
echo "=========================================="
echo "🏁 Dynamic Route Health Check Complete!"