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>
47 lines
2.1 KiB
Bash
Executable file
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
|