108 lines
2.8 KiB
Bash
Executable File
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!"
|