import { FnError } from "."; import { AddNumbers, AddStrings, Multiply, ToString, UnarrayIfOnlyHead, } from "../util"; export type BUILTIN_Arr = Args; export type BUILTIN_ToString = ToString< UnarrayIfOnlyHead<{ [Idx in keyof Args]: ToString; }> >; export type BUILTIN_Add = Args extends readonly string[] ? AddStrings : Args extends readonly number[] ? AddNumbers : FnError<`Cannot add operands ${ToString}`>; export type BUILTIN_Mul = Args extends [ infer A, infer B, infer C ] ? FnError<`Can only multiply [number, number], but got ${ToString}`> : Args extends [infer M extends number, infer N extends number] ? Multiply : FnError<`Can only multiply [number, number], but got ${ToString}`>; export type BUILTIN_IfElse = Args extends [ infer A, infer B, infer C, infer D ] ? FnError<`Invalid args for "if": ${ToString}`> : Args extends [infer Cond, infer TrueVal, infer FalseVal] ? Cond extends true ? TrueVal : Cond extends false ? FalseVal : FnError<`Condition value ${ToString} is not a boolean`> : FnError<`Invalid args for "if": ${ToString}`>;