33 lines
982 B
TypeScript
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;
|
|
} |