/** * ViewData Builder Contract * * Purpose: Transform ViewModels into ViewData for templates * * Rules: * - Deterministic and side-effect free * - No HTTP/API calls * - Input: ViewModel * - Output: ViewData (JSON-serializable) * - Must be in lib/builders/view-data/ * - Must be named *ViewDataBuilder * - Must have 'use client' directive * - Must implement static build() method */ export interface ViewDataBuilder { /** * Transform ViewModel into ViewData * * @param viewModel - Client-side ViewModel * @returns ViewData for template */ build(viewModel: TInput): TOutput; }