/** * ViewData Builder Contract * * Purpose: Transform API Transport DTOs into ViewData for templates * * Rules: * - Deterministic and side-effect free * - No HTTP/API calls * - Input: API Transport DTO (must be JSON-serializable) * - Output: ViewData (JSON-serializable template-ready data) * - Must be in lib/builders/view-data/ * - Must be named *ViewDataBuilder * - Must have 'use client' directive * - Must implement static build() method * - Must use 'satisfies' for static type enforcement */ import { ViewData } from '../view-data/ViewData'; /** * ViewData Builder Contract (Static) * * TDTO is constrained to object | null | undefined to ensure it is a serializable API DTO. * * Usage: * export class MyViewDataBuilder { * static build(apiDto: MyDTO): MyViewData { ... } * } * MyViewDataBuilder satisfies ViewDataBuilder; */ export interface ViewDataBuilder { build(apiDto: TDTO): TViewData; }