veza/.husky/pre-commit
senke a66aeade45 chore(web): drop legacy openapi-generator-cli — orval is the single source (v1.0.8 B9)
Closes Phase 3 of the v1.0.8 OpenAPI typegen migration. With the four
feature-service migrations (B2 dashboard, B3 profile, B4 playlist,
B5 track, B6 partial auth) landed, the four remaining importers of
the legacy typescript-axios output were all consuming pure model
types — easily portable to the equivalent orval-generated models
under src/services/generated/model/.

Type imports re-pointed (4 sites):
- src/types/index.ts            — VezaBackendApiInternalModelsUser /
                                  Track / TrackStatus / Playlist
- src/types/api.ts              — same trio (Track / TrackStatus / User)
- src/features/auth/types/index.ts — TokenResponse +
                                  ResendVerificationRequest
- src/features/tracks/types/track.ts — Track / TrackStatus

Same shapes, sourced from openapi.yaml — orval and the legacy
generator were emitting structurally-identical interfaces because
swaggo's spec is the common source. Verified by `npm run typecheck`
clean and 1187/1188 tests green (1 skipped is the long-standing
ResetPasswordPage flake).

Cleanup performed:
1. `git rm -rf apps/web/src/types/generated/` — 198 files / ~23k LOC
   of auto-generated typescript-axios output gone.
2. `npm uninstall @openapitools/openapi-generator-cli` — drops the
   ~150 MB Java-bundled dependency tree from node_modules.
3. `apps/web/scripts/generate-types.sh` — collapsed from a two-step
   "[1/2] legacy / [2/2] orval" pipeline to a single orval call.
4. `apps/web/scripts/check-types-sync.sh` — now diffs only
   `src/services/generated/`. The "regenerate two trees" complexity
   is gone.
5. `.husky/pre-commit` — message updated to point at the new tree.

Knock-on: the pre-commit hook should run noticeably faster (no Java
JVM spin-up to invoke openapi-generator-cli on every commit), and a
fresh `npm install` is leaner.

Not yet removed (still active under hand-written services):
- services/api/{auth,users,tracks,playlists,queue,search,social}.ts
  — these wrap features/<feature>/api/* services and remain in use
  by 2-15 callers each. They live in the orval-driven world (their
  underlying calls go through orval mutator) and don't import the
  legacy types, so they're safe parallel surfaces. Consolidation
  punted to v1.0.9 once all auth/queue endpoints are annotated and
  the remaining authService 5/9 functions ship.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 00:02:58 +02:00

47 lines
2.1 KiB
Bash
Executable file

#!/usr/bin/env sh
# Each step runs in a subshell so the cd does not leak across steps.
# Pre-commit runs from the repo root; every cd below is relative to that.
# Drift guard: ensure apps/web/src/services/generated/ (orval) matches
# veza-backend-api/openapi.yaml. Regenerates locally then fails if the
# committed types don't match the freshly-regenerated output.
# Skip with SKIP_TYPES=1 for emergency commits (documented in CLAUDE.md).
if [ -z "$SKIP_TYPES" ]; then
(cd apps/web && bash scripts/check-types-sync.sh) || {
echo "❌ OpenAPI types are out of sync with veza-backend-api/openapi.yaml."
echo "💡 Run: make openapi && cd apps/web && bash scripts/generate-types.sh"
echo "💡 Then stage the updated src/services/generated/ and retry."
echo "💡 Tip: SKIP_TYPES=1 bypasses (not recommended)."
exit 1
}
fi
# Implicit 10.1: Type checking
# Prevent commits with TypeScript errors (warnings are allowed)
(cd apps/web && npm run typecheck 2>&1 | grep -q "error TS") && {
echo "❌ Type checking failed. Please fix TypeScript errors before committing."
echo "💡 Run 'npm run typecheck' to see all errors."
exit 1
} || true
# Implicit 10.2: Linting
# Prevent commits with linting errors (warnings are allowed).
# Pattern matches "(N error" with N>=1 in ESLint's summary line —
# avoids false positive on "(0 errors, K warnings)".
(cd apps/web && npm run lint 2>&1 | grep -qE "\([1-9][0-9]* error") && {
echo "❌ Linting failed. Please fix linting errors before committing."
echo "💡 Tip: Run 'npm run lint:fix' to automatically fix some issues."
exit 1
} || true
# Implicit 10.3: Test checking (optional, fast unit tests only)
# Skip if SKIP_TESTS environment variable is set (for quick commits)
# Only runs unit tests (not E2E) to keep it fast
if [ -z "$SKIP_TESTS" ]; then
(cd apps/web && npm test -- --run 2>&1 | grep -q "FAIL") && {
echo "❌ Tests failed. Please fix failing tests before committing."
echo "💡 Tip: Run 'npm test' to see all test failures."
echo "💡 Tip: Set SKIP_TESTS=1 to skip tests for this commit (not recommended)."
exit 1
} || true
fi