view data fixes
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 5m42s
Contract Testing / contract-snapshot (pull_request) Has been skipped

This commit is contained in:
2026-01-22 23:40:38 +01:00
parent 1288a9dc30
commit 18133aef4c
111 changed files with 841 additions and 324 deletions

View File

@@ -1,25 +1,28 @@
/**
* ViewData Builder Contract
*
* Purpose: Transform ViewModels into ViewData for templates
*
*
* Purpose: Transform API Transport DTOs into ViewData for templates
*
* Rules:
* - Deterministic and side-effect free
* - No HTTP/API calls
* - Input: ViewModel
* - Output: ViewData (JSON-serializable)
* - 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
*/
export interface ViewDataBuilder<TInput, TOutput> {
import { JsonValue } from '../types/primitives';
import { ViewData } from '../view-data/ViewData';
export interface ViewDataBuilder<TDTO extends JsonValue, TViewData extends ViewData> {
/**
* Transform ViewModel into ViewData
*
* @param viewModel - Client-side ViewModel
* Transform DTO into ViewData
*
* @param dto - API Transport DTO (JSON-serializable)
* @returns ViewData for template
*/
build(viewModel: TInput): TOutput;
build(dto: TDTO): TViewData;
}

View File

@@ -1,25 +1,28 @@
/**
* ViewModel Builder Contract
*
* Purpose: Transform API Transport DTOs into ViewModels
*
*
* Purpose: Transform ViewData into ViewModels for client-side state management
*
* Rules:
* - Deterministic and side-effect free
* - No HTTP/API calls
* - Input: API Transport DTO
* - Output: ViewModel
* - 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
*/
export interface ViewModelBuilder<TInput, TOutput> {
import { ViewData } from '../view-data/ViewData';
import { ViewModel } from '../view-models/ViewModel';
export interface ViewModelBuilder<TViewData extends ViewData, TViewModel extends ViewModel> {
/**
* Transform DTO into ViewModel
*
* @param dto - API Transport DTO
* Transform ViewData into ViewModel
*
* @param viewData - ViewData (JSON-serializable template-ready data)
* @returns ViewModel
*/
build(dto: TInput): TOutput;
build(viewData: TViewData): TViewModel;
}

View File

@@ -1,6 +1,6 @@
/**
* Base interface for ViewData objects
*
*
* All ViewData must be JSON-serializable.
* This type ensures no class instances or functions are included.
*/
@@ -10,7 +10,7 @@ export interface ViewData {
/**
* Helper type to ensure a type is ViewData-compatible
*
*
* Usage:
* ```typescript
* type MyViewData = ViewData & {