import type { Schema } from "../schema"; import type { ItemStruct, NestStruct, ListStruct, ConditionStruct, LoopStruct, SwitchStruct, YieldStruct, ReturnStruct, JumpStruct } from "../struct"; /** * Returns the union of all possible values that can be yielded by a multi-step form. */ export type YieldOutput = ListData extends [infer U, boolean] ? U : never; type ItemData = Item extends NestStruct ? NestData : Item extends YieldStruct ? YieldData : Item extends ReturnStruct ? ReturnData : [Data, Flag]; type NestData = Nest extends ListStruct ? ListData : Nest extends ConditionStruct ? ConditionData : Nest extends LoopStruct ? LoopData : Nest extends SwitchStruct ? SwitchData : Nest extends JumpStruct ? JumpData : never; type ListData = List extends [ infer Item, ...infer Rest ] ? Item extends ItemStruct ? Rest extends ListStruct ? ItemData extends [infer NextData, infer NextFlag] ? ListData : never : never : never : [Data, Flag]; type ConditionData = BranchesData<[ Condition["condition"]["then"], Condition["condition"]["else"] ], Data, Flag>; type LoopData = ListData extends [infer NextData, boolean] ? [NextData, Flag] : never; type SwitchData = BranchesData<[ ...Switch["switch"]["branches"], Switch["switch"]["default"] ], Data, Flag>; type JumpData = ItemData; type BranchesData = List extends [infer Item, ...infer Rest] ? Item extends ListStruct ? Rest extends ListStruct[] ? ListData extends [infer NextData, infer NextMark] ? Mark extends false ? BranchesData : BranchesData : never : never : never : Mark extends true ? [Data, Mark] : [Data, Flag]; type YieldData = Flag extends false ? [ Data | Yield["yield"]["next"][number] | Yield["yield"]["back"][number], Flag ] : [Data, Flag]; type ReturnData = [Data, true]; export {}; //# sourceMappingURL=yield.d.ts.map