export type NestedPathsIterator = Required> extends Required ? [] | (string | (WalkedType extends readonly unknown[] ? ArrayIndexes : never))[] : Type extends (...args: any[]) => any ? never : Type extends string | number | boolean | Date | RegExp | Buffer | Uint8Array | { _bsontype: string; } ? [] : Type extends readonly (infer EleType)[] ? [ArrayIndexes, ...NestedPathsIterator] | [...NestedPathsIterator] : Type extends object ? { [Key in Extract]: [Key, ...NestedPathsIterator]; }[Extract] | [] : []; export type NestedPaths = NestedPathsIterator; export type KeyChains = Exclude, []> extends infer Paths ? Paths extends readonly (string | number)[] ? Paths extends readonly [infer First, ...infer Rest] ? First extends string | number ? Rest extends readonly (string | number)[] ? `${First}${Rest extends readonly [] ? "" : "."}${KeyChainsJoin}` : never : never : "" : never : never; type KeyChainsJoin = Paths extends readonly [infer First, ...infer Rest] ? First extends string | number ? Rest extends readonly (string | number)[] ? `${First}${Rest extends readonly [] ? "" : "."}${KeyChainsJoin}` : never : never : ""; export type IntegerListAsc = Result["length"] extends Len ? Result : IntegerListAsc; export type Integer = IntegerListAsc[number]; export type ArrayIndexes = number extends any[]["length"] ? Integer : any[] extends [infer Ele, ...infer RestArray] ? ArrayIndexes | RestArray["length"] : never; export type Document = Record; export declare const parentLevelSymbol: unique symbol; export declare const logicalOpSymbol: unique symbol; export declare enum QueryOperator { EQ = "eq", NE = "ne", GT = "gt", GTE = "gte", LT = "lt", LTE = "lte", Exists = "exists", Contains = "contains", NotContains = "notContains" } export declare enum ReservedOperator { Not = "not", Nor = "nor", All = "all", Any = "any", Length = "length", In = "in", NotIn = "nin" } export type MaybeRegExp = T extends string ? RegExp | T : T; export type ValueAlternativeType = V extends (infer E)[] ? MaybeRegExp | V : MaybeRegExp; export type QueryOperatorCondition$contains = V extends string ? string : any; export type QueryOperatorConditions = Partial>> & Partial>> & { [QueryOperator.Exists]?: boolean; }; export type QueryConditions = { [KeyChain in KeyChains]?: QueryOperatorConditions> | ValueAlternativeType>; }; export declare enum LogicalOperator { And = "and", Or = "or" } export type LogicalCondition = (QueryConditions | LogicalConditions)[]; export type LogicalConditions = Record>; export type Query = QueryConditions & LogicalConditions; export type LogicalLevelType = { [logicalOpSymbol]: LogicalOperator; [parentLevelSymbol]: CurrentLevelType; } & LogicalCondition; export type RootLevelType = { [logicalOpSymbol]?: never; } & Query; export type CurrentLevelType = RootLevelType | LogicalLevelType; export interface ConditionBuilderOptions { ignoreUndefined?: boolean; keepNaN?: boolean; } export type RangeOptions = ConditionBuilderOptions; export type EqOptions = { queryOperator?: OP; } & ConditionBuilderOptions; export type TryConvertToInt = T extends `${Integer}` ? IntegerListAsc[T] : T extends `${number}` ? number : T; export type TypeAtKey = T extends readonly unknown[] ? K extends number ? T[K] : never : K extends keyof T ? T[K] : never; export type ParseKeyChainToPath = KeyChain extends `${infer Key}${Separator}${infer Rest}` ? [TryConvertToInt, ...ParseKeyChainToPath] : [TryConvertToInt]; export type TypeAtKeyPath = KeyPath extends (string | ArrayIndexes)[] ? KeyPath extends [infer Key, ...infer RestKeyPath] ? T extends readonly (infer E)[] ? Key extends ArrayIndexes ? TypeAtKeyPath, RestKeyPath> : TypeAtKeyPath : T extends Document ? TypeAtKeyPath, RestKeyPath> : never : T : never; export type TypeAtKeyChain = TypeAtKeyPath>; export interface FieldOperators { [QueryOperator.EQ]?: T; [QueryOperator.GT]?: T; [QueryOperator.GTE]?: T; [QueryOperator.LT]?: T; [QueryOperator.LTE]?: T; [QueryOperator.Contains]?: T extends string ? string : any; [QueryOperator.NotContains]?: T extends string ? string : any; [QueryOperator.NE]?: T; [QueryOperator.Exists]?: boolean; } export type FieldCondition = FieldOperators | T; export interface LogicalOperators { [LogicalOperator.And]?: NexusCondition[]; [LogicalOperator.Or]?: NexusCondition[]; } export type NexusCondition = { [P in keyof T]?: FieldCondition; } & LogicalOperators; export type Condition> = NexusCondition; export declare const NEXUS_STORAGE_CONDITION_BUILDER_ERROR_TYPE = "NEXUS_STORAGE_CONDITION_BUILDER"; export {}; //# sourceMappingURL=condition-type.d.ts.map