diff --git a/modules/javascript.sh b/modules/javascript.sh new file mode 100755 index 0000000..5fedbd7 --- /dev/null +++ b/modules/javascript.sh @@ -0,0 +1,124 @@ +#!/bin/bash +set -euo pipefail + +echo "====================================" +echo " Davidson CI - JavaScript/TypeScript" +echo "====================================" + +JS_COUNT="${DAVIDSON_JS_COUNT:-0}" +TS_COUNT="${DAVIDSON_TS_COUNT:-0}" +TOTAL=$((JS_COUNT + TS_COUNT)) + +if [ "$TOTAL" -eq 0 ]; then + echo "No JavaScript or TypeScript detected - skipping module" + exit 0 +fi + +echo +echo "JavaScript files: $JS_COUNT" +echo "TypeScript files: $TS_COUNT" +echo + +# ------------------------- +# Dependencies +# ------------------------- + +echo "→ Node dependencies" + +if [ -f package-lock.json ]; then + npm ci +elif [ -f package.json ]; then + echo "package.json found but no package-lock.json" +else + echo "No package.json found" +fi + +# ------------------------- +# JavaScript syntax +# ------------------------- + +echo +echo "→ JavaScript syntax" + +if [ "$JS_COUNT" -gt 0 ]; then + find . \ + -type f \ + \( -name "*.js" -o -name "*.mjs" -o -name "*.cjs" \) \ + -not -path "./node_modules/*" \ + -print0 | + while IFS= read -r -d '' file; do + echo "Checking $file" + node --check "$file" + done +else + echo "No JavaScript files - skipping syntax check" +fi + +# ------------------------- +# TypeScript +# ------------------------- + +echo +echo "→ TypeScript" + +if [ "$TS_COUNT" -gt 0 ]; then + if [ -f package.json ] && \ + node -e "let p=require('./package.json'); process.exit(p.scripts?.typecheck ? 0 : 1)" + then + npm run typecheck + elif [ -x node_modules/.bin/tsc ]; then + npx tsc --noEmit + else + echo "TypeScript detected but no TypeScript checker configured" + fi +else + echo "No TypeScript files - skipping" +fi + +# ------------------------- +# ESLint +# ------------------------- + +echo +echo "→ ESLint" + +if [ -f package.json ] && \ + node -e "let p=require('./package.json'); process.exit(p.scripts?.lint ? 0 : 1)" +then + npm run lint +else + echo "No lint script - skipping" +fi + +# ------------------------- +# Tests +# ------------------------- + +echo +echo "→ JavaScript tests" + +if [ -f package.json ] && \ + node -e "let p=require('./package.json'); process.exit(p.scripts?.test ? 0 : 1)" +then + npm test +else + echo "No test script - skipping" +fi + +# ------------------------- +# Build +# ------------------------- + +echo +echo "→ Frontend build" + +if [ -f package.json ] && \ + node -e "let p=require('./package.json'); process.exit(p.scripts?.build ? 0 : 1)" +then + npm run build +else + echo "No build script - skipping" +fi + +echo +echo "JavaScript/TypeScript module completed successfully"