Files
gridpilot.gg/apps/website/lib/contracts/builders/ViewDataBuilder.ts
2026-01-24 00:52:27 +01:00

33 lines
982 B
TypeScript

/**
* 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 to ensure it is a serializable API DTO.
*
* Usage:
* export class MyViewDataBuilder {
* static build(apiDto: MyDTO): MyViewData { ... }
* }
* MyViewDataBuilder satisfies ViewDataBuilder<MyDTO, MyViewData>;
*/
export interface ViewDataBuilder<TDTO extends object, TViewData extends ViewData> {
build(apiDto: TDTO): TViewData;
}