1- import { Type } from '@sinclair/typebox' ;
2- import { StageKind } from './stage' ;
1+ import { Type , type TSchema } from '@sinclair/typebox' ;
2+ import { BaseStageConfig , StageKind } from './stage' ;
3+ import { type StageValidationResult } from './stage.schemas' ;
34import {
45 AssetAllocationStageConfigData ,
56 MultiAssetAllocationStageConfigData ,
67} from './asset_allocation_stage.validation' ;
7- import { ChatStageConfigData } from './chat_stage.validation' ;
8+ import {
9+ ChatStageConfigData ,
10+ validateChatStageConfig ,
11+ } from './chat_stage.validation' ;
812import { ChipStageConfigData } from './chip_stage.validation' ;
913import { ComprehensionStageConfigData } from './comprehension_stage.validation' ;
1014import { FlipCardStageConfigData } from './flipcard_stage.validation' ;
1115import { RankingStageConfigData } from './ranking_stage.validation' ;
1216import { InfoStageConfigData } from './info_stage.validation' ;
1317import { PayoutStageConfigData } from './payout_stage.validation' ;
14- import { PrivateChatStageConfigData } from './private_chat_stage.validation' ;
18+ import {
19+ PrivateChatStageConfigData ,
20+ validatePrivateChatStageConfig ,
21+ } from './private_chat_stage.validation' ;
1522import { ProfileStageConfigData } from './profile_stage.validation' ;
1623import { RevealStageConfigData } from './reveal_stage.validation' ;
1724import { RoleStageConfigData } from './role_stage.validation' ;
@@ -35,28 +42,39 @@ export const StageKindData = Type.Enum(StageKind, {$id: 'StageKind'});
3542// writeExperiment, updateStageConfig endpoints //
3643// ************************************************************************* //
3744
38- /** Map of stage kinds to their validators */
39- export const CONFIG_DATA = {
40- assetAllocation : AssetAllocationStageConfigData ,
41- multiAssetAllocation : MultiAssetAllocationStageConfigData ,
42- chat : ChatStageConfigData ,
43- chip : ChipStageConfigData ,
44- comprehension : ComprehensionStageConfigData ,
45- flipcard : FlipCardStageConfigData ,
46- info : InfoStageConfigData ,
47- payout : PayoutStageConfigData ,
48- privateChat : PrivateChatStageConfigData ,
49- profile : ProfileStageConfigData ,
50- ranking : RankingStageConfigData ,
51- reveal : RevealStageConfigData ,
52- role : RoleStageConfigData ,
53- salesperson : SalespersonStageConfigData ,
54- stockinfo : StockInfoStageConfigData ,
55- surveyPerParticipant : SurveyPerParticipantStageConfigData ,
56- survey : SurveyStageConfigData ,
57- tos : TOSStageConfigData ,
58- transfer : TransferStageConfigData ,
45+ /** Stage config entry with schema and optional cross-field validator. */
46+ export interface StageConfigEntry {
47+ schema : TSchema ;
48+ validate ?: ( stage : BaseStageConfig ) => StageValidationResult ;
49+ }
50+
51+ /** Map of stage kinds to their schema and optional validator */
52+ export const CONFIG_DATA : Record < string , StageConfigEntry > = {
53+ assetAllocation : { schema : AssetAllocationStageConfigData } ,
54+ multiAssetAllocation : { schema : MultiAssetAllocationStageConfigData } ,
55+ chat : { schema : ChatStageConfigData , validate : validateChatStageConfig } ,
56+ chip : { schema : ChipStageConfigData } ,
57+ comprehension : { schema : ComprehensionStageConfigData } ,
58+ flipcard : { schema : FlipCardStageConfigData } ,
59+ info : { schema : InfoStageConfigData } ,
60+ payout : { schema : PayoutStageConfigData } ,
61+ privateChat : {
62+ schema : PrivateChatStageConfigData ,
63+ validate : validatePrivateChatStageConfig ,
64+ } ,
65+ profile : { schema : ProfileStageConfigData } ,
66+ ranking : { schema : RankingStageConfigData } ,
67+ reveal : { schema : RevealStageConfigData } ,
68+ role : { schema : RoleStageConfigData } ,
69+ salesperson : { schema : SalespersonStageConfigData } ,
70+ stockinfo : { schema : StockInfoStageConfigData } ,
71+ surveyPerParticipant : { schema : SurveyPerParticipantStageConfigData } ,
72+ survey : { schema : SurveyStageConfigData } ,
73+ tos : { schema : TOSStageConfigData } ,
74+ transfer : { schema : TransferStageConfigData } ,
5975} ;
6076
6177/** StageConfig input validation (union of all stage types) */
62- export const StageConfigData = Type . Union ( Object . values ( CONFIG_DATA ) ) ;
78+ export const StageConfigData = Type . Union (
79+ Object . values ( CONFIG_DATA ) . map ( ( entry ) => entry . schema ) ,
80+ ) ;
0 commit comments