| name | tmdb-codegen |
| description | TMDB API code generation workflow with selective Zod schemas using pnpm codegen:tmdb. Use when working with TMDB endpoints, regenerating types, adding TMDB API functionality, modifying endpoints-config.js, tmdb-server-functions.ts, Zod schemas, or when the user mentions TMDB codegen, endpoints-config, pnpm codegen:tmdb, needsZodSchema, or auto-generated TMDB files. |
TMDB Code Generation
Overview
This project uses automatic code generation for TMDB API integration with selective Zod schema generation for optimal performance.
Critical Rule
NEVER manually edit src/_generated/tmdb-server-functions.ts - it is auto-generated.
Always use pnpm codegen:tmdb to regenerate after making changes to endpoint configurations.
Architecture
Selective Zod Schema Generation
The project uses a selective approach to Zod schema generation:
- Performance optimization: 98.7% size reduction (from 16K lines to ~200 lines)
- On-demand schemas: Only generates Zod schemas for endpoints that need them
- AI tool compatibility: Schemas are generated for endpoints requiring OpenAI Structured Outputs validation
When Zod Schemas Are Generated
Zod schemas are only generated for endpoints marked with needsZodSchema: true in endpoints-config.js.
Why selective?
- Most endpoints only need TypeScript types
- Zod schemas are only required for AI tools using OpenAI Structured Outputs
- Dramatically improves developer experience (faster builds, smaller bundles, better IDE performance)
Configuration
Endpoint Configuration File
Location: tooling/tmdb-codegen/endpoints-config.js
export const endpoints = [
{
path: "/3/search/movie",
functionName: "searchMovies",
needsZodSchema: true,
},
{
path: "/3/movie/{movie_id}",
functionName: "getMovieDetails",
},
];
Adding New Endpoints
- Add endpoint configuration to
endpoints-config.js
- Set
needsZodSchema: true only if needed for AI tools
- Run
pnpm codegen:tmdb to regenerate
{
path: "/3/discover/tv",
functionName: "discoverTvShows",
needsZodSchema: false,
}
Code Generation Commands
pnpm codegen
pnpm codegen:tmdb
pnpm codegen:zod
Generated Files
Auto-Generated (DO NOT EDIT)
src/_generated/tmdb-server-functions.ts - Server functions with TypeScript types
src/_generated/tmdb-zod-schemas.ts - Selective Zod schemas (only for endpoints with needsZodSchema: true)
These files are git-ignored and must be regenerated after cloning:
pnpm codegen:tmdb
How It Works
1. Custom Generator
Location: tooling/tmdb-codegen/generate-selective-zod.js
- Reads
endpoints-config.js to find endpoints needing Zod schemas
- Generates hand-crafted Zod schemas (not auto-generated from TypeScript)
- Applies OpenAI compatibility fixes (
.nullable().optional())
- Outputs minimal, optimized schemas
2. OpenAI Compatibility
Automatically applies fixes for OpenAI Structured Outputs:
export const movieSchema = z.object({
id: z.number(),
title: z.string().nullable().optional(),
overview: z.string().nullable().optional(),
});
Usage in Code
Importing Server Functions
import { searchMovies, getMovieDetails } from "@/utils/tmdb-server-functions";
const movies = await searchMovies({ query: "Inception" });
Importing Zod Schemas (for AI tools)
import { movieSearchSchema } from "@/utils/tmdb-zod-schemas";
const completion = await openai.chat.completions.create({
model: "gpt-4",
messages: [...],
response_format: zodResponseFormat(movieSearchSchema, "movies"),
});
When to Regenerate
Regenerate TMDB code when:
- Adding new endpoints - Add to
endpoints-config.js, then run pnpm codegen:tmdb
- Changing endpoint configuration - Modify
endpoints-config.js, then regenerate
- After cloning repository - Generated files are git-ignored
- Updating TMDB API version - Update base URL, then regenerate
Best Practices
- Never edit generated files - Always use
pnpm codegen:tmdb
- Minimal Zod schemas - Only set
needsZodSchema: true when needed for AI tools
- Check generation - Verify generated files after running codegen
- Commit config changes -
endpoints-config.js is version-controlled
- Don't commit generated files - They're git-ignored for a reason
Performance Impact
Before Selective Generation
- 16,000+ lines of Zod schemas
- Slow builds and IDE performance
- Large bundle size
After Selective Generation
- ~200 lines of Zod schemas (98.7% reduction)
- Fast builds and responsive IDE
- Minimal bundle impact
Common Workflows
Add New TMDB Endpoint
pnpm codegen:tmdb
import { newFunction } from "@/utils/tmdb-server-functions";
Add Zod Schema to Existing Endpoint
pnpm codegen:zod
import { newSchema } from "@/utils/tmdb-zod-schemas";
Troubleshooting
Generated files missing after clone
pnpm codegen:tmdb
TypeScript errors in generated files
rm -rf src/_generated
pnpm codegen:tmdb
Zod schema needed but not generated
Check endpoints-config.js - ensure needsZodSchema: true is set for that endpoint, then regenerate.