/** * ViewModel Builder Contract * * Purpose: Transform ViewData into ViewModels for client-side state management * * Rules: * - Deterministic and side-effect free * - No HTTP/API calls * - Input: ViewData (JSON-serializable template-ready data) * - Output: ViewModel (client-only class) * - Must be in lib/builders/view-models/ * - Must be named *ViewModelBuilder * - Must have 'use client' directive * - Must implement static build() method * - Must use 'satisfies' for static type enforcement */ import { ViewData } from '../view-data/ViewData'; import { ViewModel } from '../view-models/ViewModel'; /** * ViewModel Builder Contract (Static) * * Usage: * export class MyViewModelBuilder { * static build(viewData: MyViewData): MyViewModel { ... } * } * MyViewModelBuilder satisfies ViewModelBuilder; */ export interface ViewModelBuilder { build(viewData: TViewData): TViewModel; }