import { NestedProperties, PhoneNumber, PhoneNumberInput, PrimitiveField, RefProperty, RefPropertyDefault, ReferenceToMultiTarget, WeaviateField } from '../index.js'; import { ReferenceManager } from '../references/classes.js'; import { CrossReference } from '../references/index.js'; export type ExtractCrossReferenceType = T extends CrossReference ? U : never; type ExtractNestedType = T extends (infer U)[] ? U extends NestedProperties ? U : never : T extends NestedProperties ? T : never; export type QueryNested = { [K in NestedKeys]: { name: K; properties: QueryProperty>[]; }; }[NestedKeys]; export type QueryNestedDefault = { name: string; properties: (string | QueryNestedDefault)[]; }; export type QueryProperty = T extends undefined ? string | QueryNestedDefault : PrimitiveKeys | QueryNested; export type QueryReference = T extends undefined ? RefPropertyDefault : RefProperty; export type NonRefProperty = keyof T | QueryNested; export type NonPrimitiveProperty = RefProperty | QueryNested; export type QueryVector = V extends undefined ? string : keyof V & string; export type IncludeVector = boolean | QueryVector[] | undefined; export type IsEmptyType = keyof T extends never ? true : false; export type ReferenceInput = string | ReferenceToMultiTarget | ReferenceManager | (string | ReferenceToMultiTarget | ReferenceManager)[]; export type ReferenceInputs = Obj extends undefined ? Record> : { [Key in keyof Obj as Key extends RefKeys ? Key : never]: ReferenceInput>; }; export type IsPrimitiveField = T extends PrimitiveField ? T : never; export type IsWeaviateField = T extends WeaviateField ? T : never; export type IsNestedField = T extends NestedProperties | NestedProperties[] ? T : never; /** * This is an internal type that is used to extract the keys of a user-provided generic type that are primitive fields, e.g. non-nested and non-reference. */ export type PrimitiveKeys = Obj extends undefined ? string : { [Key in keyof Obj]-?: undefined extends Obj[Key] ? IsPrimitiveField> extends never ? never : Key : IsPrimitiveField extends never ? never : Key; }[keyof Obj] & string; /** * This is an internal type that is used to extract the keys of a user-provided generic type that are references. */ export type RefKeys = { [Key in keyof Obj]: Obj[Key] extends CrossReference | undefined ? Key : never; }[keyof Obj] & string; /** * This is an internal type that is used to extract the keys of a user-provided generic type that are not references. */ export type NonRefKeys = { [Key in keyof Obj]-?: undefined extends Obj[Key] ? IsWeaviateField> extends never ? never : Key : IsWeaviateField extends never ? never : Key; }[keyof Obj] & string; /** * This is an internal type that is used to extract the keys of a user-provided generic type that are nested properties. */ export type NestedKeys = { [Key in keyof Obj]-?: undefined extends Obj[Key] ? IsNestedField> extends never ? never : Key : IsNestedField extends never ? never : Key; }[keyof Obj] & string; /** * This is an internal type that is used to extract the allowed inputs for a non-generic type that is not a reference. */ export type NonReferenceInputs = Obj extends undefined ? Record : { [Key in keyof Obj as Key extends NonRefKeys ? Key : never]: MapPhoneNumberType; }; export type MapPhoneNumberType = T extends PhoneNumber ? PhoneNumberInput : T; export type NonEmpty = keyof T extends never ? never : T; export {};