UNPKG

ts-flex-query

Version:
11 lines (10 loc) 1.02 kB
import { Expression, PipeOperator } from '../core'; import { ExpressionResultType } from './expression-result-type'; import { QueryResultType } from './query-result-type'; import { TsFlexQueryTypeMarker, TsFlexQueryTypeProperty } from './ts-flex-query-type'; import { ExpandRecursively, IfObject, IfPrimitive, PickPrimitiveFields } from './utils'; export type EvaluatedResultType<T, TExpandObjects = false> = IfPrimitive<T, T, T extends (infer TElement)[] ? EvaluatedResultType<TElement, TExpandObjects>[] : IfObject<T, T extends TsFlexQueryTypeMarker<'record'> ? { [TKey in Exclude<keyof T, TsFlexQueryTypeProperty>]: EvaluatedResultType<T[TKey], TExpandObjects>; } : T extends undefined ? undefined : TExpandObjects extends true ? ExpandRecursively<Omit<T, TsFlexQueryTypeProperty>> : PickPrimitiveFields<T>, T>>; export type EvaluatedExpressionType<T extends Expression> = EvaluatedResultType<ExpressionResultType<T>>; export type EvaluatedQueryType<T extends PipeOperator> = EvaluatedResultType<QueryResultType<T>>;