import { FindOperator } from "./FindOperator"; import { EqualOperator } from "./EqualOperator"; /** * A single property handler for FindOptionsWhere. * * The reason why we have both "PropertyToBeNarrowed" and "Property" is that Union is narrowed down when extends is used. * It means the result of FindOptionsWhereProperty<1 | 2> doesn't include FindOperator<1 | 2> but FindOperator<1> | FindOperator<2>. * So we keep the original Union as Original and pass it to the FindOperator too. Original remains Union as extends is not used for it. */ export type FindOptionsWhereProperty = PropertyToBeNarrowed extends Promise ? FindOptionsWhereProperty> : PropertyToBeNarrowed extends Array ? FindOptionsWhereProperty> : PropertyToBeNarrowed extends Function ? never : PropertyToBeNarrowed extends Buffer ? Property | FindOperator : PropertyToBeNarrowed extends Date ? Property | FindOperator : PropertyToBeNarrowed extends string ? Property | FindOperator : PropertyToBeNarrowed extends number ? Property | FindOperator : PropertyToBeNarrowed extends boolean ? Property | FindOperator : PropertyToBeNarrowed extends object ? FindOptionsWhere | FindOptionsWhere[] | EqualOperator | FindOperator | boolean | Property : Property | FindOperator; /** * Used for find operations. */ export type FindOptionsWhere = { [P in keyof Entity]?: P extends "toString" ? unknown : FindOptionsWhereProperty>; };