view data fixes
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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 & {
|
||||
|
||||
Reference in New Issue
Block a user