/* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/no-explicit-any */ import { Data, flow, type Option, Pipeable, type S } from "effect-app" import type { NonNegativeInt } from "effect-app/Schema" import type { Covariant } from "effect/Types" import type { Ops } from "../filter/filterApi.js" import type { FieldValues } from "../filter/types.js" import type { FieldPath, FieldPathValue, RefineFieldPathValue } from "../filter/types/path/eager.js" export type QAll< TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, A = TFieldValues, R = never, TType extends "one" | "many" = "many", Exclusive extends boolean = false > = | Query | QueryWhere | QueryEnd | QueryProjection export const QId = Symbol() export type QId = typeof QId export interface QueryTogether< out TFieldValues extends FieldValues, out TFieldValuesRefined extends TFieldValues = TFieldValues, out Exclusive extends boolean = false, out T extends "initial" | "where" | "end" | "projection" = "initial", out A = TFieldValues, out R = never, out TType extends "many" | "one" | "count" = "many" > extends Pipeable.Pipeable { readonly [QId]: { readonly _TFieldValues: Covariant readonly _T: Covariant readonly _TFieldValuesRefined: Covariant readonly _A: Covariant readonly _R: Covariant readonly _TT: Covariant readonly _Exclusive: Covariant } } type ExtractTType = T extends QueryTogether ? TType : never type ExtractExclusiveness = T extends QueryTogether ? Exclusive : never type ExtractFieldValuesRefined = T extends QueryTogether ? TFieldValuesRefined : never export type RelationDirection = "some" | "every" export type Relation = { relation: RelationDirection } export type Query = QueryTogether export type QueryWhere< TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, Exclusive extends boolean = false > = & QueryTogether< TFieldValues, TFieldValuesRefined, Exclusive, "where" > & Relation export type QueryEnd< TFieldValues extends FieldValues, TType extends "many" | "one" | "count" = "many", Exclusive extends boolean = false > = QueryTogether< TFieldValues, TFieldValues, Exclusive, "end", TFieldValues, never, TType > export type QueryProjection< TFieldValues extends FieldValues, A = TFieldValues, R = never, TType extends "many" | "one" | "count" = "many", Exclusive extends boolean = false > = QueryTogether< TFieldValues, TFieldValues, Exclusive, "projection", A, R, TType > export type Q = | Initial | Where | And | Or | Order | Page | Project | One | Count export class Initial extends Data.TaggedClass("value")<{ value: "initial" }> implements Query { readonly [QId]!: any constructor() { super({ value: "initial" as const }) } override pipe() { // eslint-disable-next-line prefer-rest-params return Pipeable.pipeArguments(this, arguments) } } export class Where extends Data.TaggedClass("where")<{ current: Query operation: [string, Ops, any] | [string, any] | ((q: Query) => QueryWhere) relation: RelationDirection subPath?: string }> implements QueryWhere { readonly [QId]!: any override pipe() { // eslint-disable-next-line prefer-rest-params return Pipeable.pipeArguments(this, arguments) } } export class And extends Data.TaggedClass("and")<{ current: Query operation: [string, Ops, any] | [string, any] | ((q: Query) => QueryWhere) relation: RelationDirection }> implements QueryWhere { readonly [QId]!: any override pipe() { // eslint-disable-next-line prefer-rest-params return Pipeable.pipeArguments(this, arguments) } } export class Or extends Data.TaggedClass("or")<{ current: Query operation: [string, Ops, any] | [string, any] | ((q: Query) => QueryWhere) relation: RelationDirection }> implements QueryWhere { readonly [QId]!: any override pipe() { // eslint-disable-next-line prefer-rest-params return Pipeable.pipeArguments(this, arguments) } } export class Page extends Data.TaggedClass("page")<{ current: Query | QueryWhere | QueryEnd take?: number | undefined skip?: number | undefined }> implements QueryEnd { readonly [QId]!: any override pipe() { // eslint-disable-next-line prefer-rest-params return Pipeable.pipeArguments(this, arguments) } } export class One extends Data.TaggedClass("one")<{ current: Query | QueryWhere | QueryEnd }> implements QueryEnd { readonly [QId]!: any override pipe() { // eslint-disable-next-line prefer-rest-params return Pipeable.pipeArguments(this, arguments) } } export class Count extends Data.TaggedClass("count")<{ current: Query | QueryWhere | QueryEnd }> implements QueryEnd { readonly [QId]!: any override pipe() { // eslint-disable-next-line prefer-rest-params return Pipeable.pipeArguments(this, arguments) } } export class Order> extends Data.TaggedClass("order")<{ current: Query | QueryWhere | QueryEnd field: TFieldName direction: "ASC" | "DESC" }> implements QueryEnd { readonly [QId]!: any override pipe() { // eslint-disable-next-line prefer-rest-params return Pipeable.pipeArguments(this, arguments) } } export class Project extends Data.TaggedClass("project")<{ current: Query | QueryWhere | QueryEnd schema: S.Codec mode: "collect" | "project" | "transform" }> implements QueryProjection { readonly [QId]!: any override pipe() { // eslint-disable-next-line prefer-rest-params return Pipeable.pipeArguments(this, arguments) } } export const make: () => Query = () => new Initial() export const where: FilterWhere = (...operation: any[]) => (current: any) => new Where({ current, operation: typeof operation[0] === "function" ? flow(...operation as [any]) : operation } as any) export const and: FilterContinuationAnd = (...operation: any[]) => (current: any) => new And({ current, operation: typeof operation[0] === "function" ? flow(...operation as [any]) : operation } as any) export const or: FilterContinuationOr = (...operation: any[]) => (current: any) => new Or({ current, operation: typeof operation[0] === "function" ? flow(...operation as [any]) : operation } as any) export const whereEvery: WhereEveryOrSome = ((subPath: string, ...[first, ...rest]: any[]) => (current: any) => new Where( { current, operation: typeof first === "function" ? flow(...[first, ...rest] as [any]) : [`${subPath}.-1.${first}`, ...rest], relation: "every", subPath } as any )) as unknown as WhereEveryOrSome export const whereSome: WhereEveryOrSome = ((subPath: string, ...[first, ...rest]: any[]) => (current: any) => new Where( { current, operation: typeof first === "function" ? flow(...[first, ...rest] as [any]) : [`${subPath}.-1.${first}`, ...rest], relation: "some", subPath } as any )) as unknown as WhereEveryOrSome export const order: { < Q extends Query | QueryWhere | QueryEnd >( field: FieldPath>, direction?: "ASC" | "DESC" ): ( current: Q ) => QueryEnd, "many", ExtractExclusiveness> } = (field, direction = "ASC") => (current) => new Order({ current, field: field as any, direction }) export const page: { ( page: { skip?: number; take?: number } ): | QueryWhere | QueryEnd>( current: Q ) => QueryEnd, "many", ExtractExclusiveness> } = ({ skip, take }) => (current) => new Page({ current, take, skip }) export const one: { | QueryWhere | QueryEnd>( current: Q ): QueryEnd, "one", ExtractExclusiveness> } = (current) => new One({ current }) // it's better to implement a distinct count so that the implementation can be optimised per adapter export const count: { < Q extends Query | QueryWhere | QueryEnd >( current: Q ): QueryProjection, NonNegativeInt, never, "count", ExtractExclusiveness> } = (current) => new Count({ current }) export const project: { < Q extends Query | QueryWhere | QueryEnd, I, A = ExtractFieldValuesRefined, R = never, E extends boolean = ExtractExclusiveness >( schema: S.Codec< Option.Option, { [K in keyof I]: K extends keyof ExtractFieldValuesRefined ? I[K] : never }, R >, mode: "collect" ): ( current: Q ) => QueryProjection, A, R, ExtractTType, E> < Q extends Query | QueryWhere | QueryEnd, I, A = ExtractFieldValuesRefined, R = never, E extends boolean = ExtractExclusiveness >( schema: S.Codec< A, { [K in keyof I]: K extends keyof ExtractFieldValuesRefined ? I[K] : never }, R >, mode: "project" ): ( current: Q ) => QueryProjection, A, R, ExtractTType, E> < Q extends Query | QueryWhere | QueryEnd, I, A = ExtractFieldValuesRefined, R = never, E extends boolean = ExtractExclusiveness >( schema: S.Codec< A, { [K in keyof I]: K extends keyof ExtractFieldValuesRefined ? I[K] : never }, R > ): ( current: Q ) => QueryProjection, A, R, ExtractTType, E> } = (schema: any, mode = "transform") => (current: any) => new Project({ current, schema, mode } as any) type GetArV = T extends readonly (infer R)[] ? R : never export type FilterContinuations = { < TFieldValues extends FieldValues, TFieldName extends FieldPath, V extends FieldPathValue, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false >( path: TFieldName, value: V ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => IsCurrentInitial extends true ? QueryWhere : QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, V extends FieldPathValue, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false >( path: TFieldName, op: "gt" | "gte" | "lt" | "lte" | "neq", value: V // only numbers? ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => IsCurrentInitial extends true ? QueryWhere : QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false >( path: TFieldName, op: "startsWith" | "endsWith" | "contains" | "notContains" | "notStartsWith" | "notEndsWith", value: FieldPathValue extends string ? string : never ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => IsCurrentInitial extends true ? QueryWhere : QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, const V extends readonly FieldPathValue[], TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false >( path: TFieldName, op: "in" | "notIn", value: V ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => IsCurrentInitial extends true ? QueryWhere : QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, V extends FieldPathValue, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false >( path: TFieldName, op: | "includes" | "notIncludes", value: GetArV ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => IsCurrentInitial extends true ? QueryWhere : QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, V extends FieldPathValue, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false >( path: TFieldName, op: | "includes-any" | "notIncludes-any" | "includes-all" | "notIncludes-all", value: readonly GetArV[] ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => IsCurrentInitial extends true ? QueryWhere : QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, V extends FieldPathValue, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false >(f: { path: TFieldName op: "eq" value: V }): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => IsCurrentInitial extends true ? QueryWhere : QueryWhere } export type FilterContinuationsWithSubpath = { < TFieldValues extends FieldValues, TFieldName extends FieldPath, TFieldValuesSub extends TFieldValues[TFieldName][number], TFieldNameSub extends FieldPath, V extends FieldPathValue >( subPath: TFieldName, restPath: TFieldNameSub, value: V ): ( current: Query ) => QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, TFieldValuesSub extends TFieldValues[TFieldName][number], TFieldNameSub extends FieldPath, V extends FieldPathValue >( subPath: TFieldName, restPath: TFieldNameSub, op: "gt" | "gte" | "lt" | "lte" | "neq", value: V // only numbers? ): ( current: Query ) => QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, TFieldValuesSub extends TFieldValues[TFieldName][number], TFieldNameSub extends FieldPath >( subPath: TFieldName, restPath: TFieldNameSub, op: "startsWith" | "endsWith" | "contains" | "notContains" | "notStartsWith" | "notEndsWith", value: FieldPathValue extends string ? string : never ): ( current: Query ) => QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, TFieldValuesSub extends TFieldValues[TFieldName][number], TFieldNameSub extends FieldPath, const V extends readonly FieldPathValue[] >( subPath: TFieldName, restPath: TFieldNameSub, op: "in" | "notIn", value: V ): ( current: Query ) => QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, TFieldValuesSub extends TFieldValues[TFieldName][number], TFieldNameSub extends FieldPath, V extends FieldPathValue >( subPath: TFieldName, restPath: TFieldNameSub, op: | "includes" | "notIncludes", value: GetArV ): ( current: Query ) => QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, TFieldValuesSub extends TFieldValues[TFieldName][number], TFieldNameSub extends FieldPath, V extends FieldPathValue >( subPath: TFieldName, restPath: TFieldNameSub, op: | "includes-any" | "notIncludes-any" | "includes-all" | "notIncludes-all", value: readonly GetArV[] ): ( current: Query ) => QueryWhere < TFieldValues extends FieldValues, TFieldName extends FieldPath, TFieldValuesSub extends TFieldValues[TFieldName][number], TFieldNameSub extends FieldPath, V extends FieldPathValue >(f: { subPath: TFieldName restPath: TFieldNameSub op: "eq" value: V }): ( current: Query ) => QueryWhere } /* dprint-ignore-start */ export type RefineWithLiteral< TFieldValues extends FieldValues, TFieldName extends FieldPath, V, Exclde extends boolean = false > = // refine only if the value is a primitive [V] extends [string | number | boolean | null | bigint] ? RefineFieldPathValue : TFieldValues /* dprint-ignore-end */ export type FilteringRefinements = { < TFieldValues extends FieldValues, const TFieldName extends FieldPath, const V extends FieldPathValue, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false >( path: TFieldName, value: V ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere< TFieldValues, // @ts-expect-error it's TS RefineWithLiteral, TFieldName extends "_tag" ? true : false // consider only _tag as an exclusive field and only in the positive case > < TFieldValues extends FieldValues, const TFieldName extends FieldPath, const V extends FieldPathValue, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false >( path: TFieldName, op: "neq", value: V ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere< TFieldValues, // @ts-expect-error it's TS RefineWithLiteral, E > < TFieldValues extends FieldValues, TFieldName extends FieldPath, const V extends readonly FieldPathValue[], TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false >( path: TFieldName, op: "in", value: V ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere< TFieldValues, // @ts-expect-error it's TS RefineWithLiteral>, E > } export type NestedQueriesFixedRefinement = { < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false >( fb: (current: Query) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere, fd: (query: QueryWhere) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere, fd: (query: QueryWhere) => QueryWhere, fe: (query: QueryWhere) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere, fd: (query: QueryWhere) => QueryWhere, fe: (query: QueryWhere) => QueryWhere, ff: (query: QueryWhere) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere, fd: (query: QueryWhere) => QueryWhere, fe: (query: QueryWhere) => QueryWhere, ff: (query: QueryWhere) => QueryWhere, fg: (query: QueryWhere) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere, fd: (query: QueryWhere) => QueryWhere, fe: (query: QueryWhere) => QueryWhere, ff: (query: QueryWhere) => QueryWhere, fg: (query: QueryWhere) => QueryWhere, fh: (query: QueryWhere) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere, fd: (query: QueryWhere) => QueryWhere, fe: (query: QueryWhere) => QueryWhere, ff: (query: QueryWhere) => QueryWhere, fg: (query: QueryWhere) => QueryWhere, fh: (query: QueryWhere) => QueryWhere, fi: (query: QueryWhere) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere, fd: (query: QueryWhere) => QueryWhere, fe: (query: QueryWhere) => QueryWhere, ff: (query: QueryWhere) => QueryWhere, fg: (query: QueryWhere) => QueryWhere, fh: (query: QueryWhere) => QueryWhere, fi: (query: QueryWhere) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere, fd: (query: QueryWhere) => QueryWhere, fe: (query: QueryWhere) => QueryWhere, ff: (query: QueryWhere) => QueryWhere, fg: (query: QueryWhere) => QueryWhere, fh: (query: QueryWhere) => QueryWhere, fi: (query: QueryWhere) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false, E12 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere, fd: (query: QueryWhere) => QueryWhere, fe: (query: QueryWhere) => QueryWhere, ff: (query: QueryWhere) => QueryWhere, fg: (query: QueryWhere) => QueryWhere, fh: (query: QueryWhere) => QueryWhere, fi: (query: QueryWhere) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere, fl: ( query: QueryWhere ) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false, E12 extends boolean = false, E13 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere, fd: (query: QueryWhere) => QueryWhere, fe: (query: QueryWhere) => QueryWhere, ff: (query: QueryWhere) => QueryWhere, fg: (query: QueryWhere) => QueryWhere, fh: (query: QueryWhere) => QueryWhere, fi: (query: QueryWhere) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere, fl: ( query: QueryWhere ) => QueryWhere, fm: ( query: QueryWhere ) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false, E12 extends boolean = false, E13 extends boolean = false, E14 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: (query: QueryWhere) => QueryWhere, fd: (query: QueryWhere) => QueryWhere, fe: (query: QueryWhere) => QueryWhere, ff: (query: QueryWhere) => QueryWhere, fg: (query: QueryWhere) => QueryWhere, fh: (query: QueryWhere) => QueryWhere, fi: (query: QueryWhere) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere, fl: ( query: QueryWhere ) => QueryWhere, fm: ( query: QueryWhere ) => QueryWhere, fn: ( query: QueryWhere ) => QueryWhere ): ( current: IsCurrentInitial extends true ? Query : QueryWhere ) => QueryWhere } export type NestedQueriesFreeIntersectionRefinement = { < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false >( fb: (current: Query) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, TFieldValuesRefined10 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, TFieldValuesRefined10 extends TFieldValues = TFieldValues, TFieldValuesRefined11 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, TFieldValuesRefined10 extends TFieldValues = TFieldValues, TFieldValuesRefined11 extends TFieldValues = TFieldValues, TFieldValuesRefined12 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false, E12 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere, fl: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, TFieldValuesRefined10 extends TFieldValues = TFieldValues, TFieldValuesRefined11 extends TFieldValues = TFieldValues, TFieldValuesRefined12 extends TFieldValues = TFieldValues, TFieldValuesRefined13 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false, E12 extends boolean = false, E13 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere, fl: ( query: QueryWhere ) => QueryWhere, fm: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, TFieldValuesRefined10 extends TFieldValues = TFieldValues, TFieldValuesRefined11 extends TFieldValues = TFieldValues, TFieldValuesRefined12 extends TFieldValues = TFieldValues, TFieldValuesRefined13 extends TFieldValues = TFieldValues, TFieldValuesRefined14 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false, E12 extends boolean = false, E13 extends boolean = false, E14 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere, fl: ( query: QueryWhere ) => QueryWhere, fm: ( query: QueryWhere ) => QueryWhere, fn: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere } // to be safe, or forces the output to be exclusive because you can always or _tag filters export type NestedQueriesFreeDisjointRefinement = { < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false >( fb: (current: Query) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, TFieldValuesRefined10 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, TFieldValuesRefined10 extends TFieldValues = TFieldValues, TFieldValuesRefined11 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, TFieldValuesRefined10 extends TFieldValues = TFieldValues, TFieldValuesRefined11 extends TFieldValues = TFieldValues, TFieldValuesRefined12 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false, E12 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere, fl: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, TFieldValuesRefined10 extends TFieldValues = TFieldValues, TFieldValuesRefined11 extends TFieldValues = TFieldValues, TFieldValuesRefined12 extends TFieldValues = TFieldValues, TFieldValuesRefined13 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false, E12 extends boolean = false, E13 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere, fl: ( query: QueryWhere ) => QueryWhere, fm: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere < TFieldValues extends FieldValues, TFieldValuesRefined extends TFieldValues = TFieldValues, TFieldValuesRefined2 extends TFieldValues = TFieldValues, TFieldValuesRefined3 extends TFieldValues = TFieldValues, TFieldValuesRefined4 extends TFieldValues = TFieldValues, TFieldValuesRefined5 extends TFieldValues = TFieldValues, TFieldValuesRefined6 extends TFieldValues = TFieldValues, TFieldValuesRefined7 extends TFieldValues = TFieldValues, TFieldValuesRefined8 extends TFieldValues = TFieldValues, TFieldValuesRefined9 extends TFieldValues = TFieldValues, TFieldValuesRefined10 extends TFieldValues = TFieldValues, TFieldValuesRefined11 extends TFieldValues = TFieldValues, TFieldValuesRefined12 extends TFieldValues = TFieldValues, TFieldValuesRefined13 extends TFieldValues = TFieldValues, TFieldValuesRefined14 extends TFieldValues = TFieldValues, E extends boolean = false, E2 extends boolean = false, E3 extends boolean = false, E4 extends boolean = false, E5 extends boolean = false, E6 extends boolean = false, E7 extends boolean = false, E8 extends boolean = false, E9 extends boolean = false, E10 extends boolean = false, E11 extends boolean = false, E12 extends boolean = false, E13 extends boolean = false, E14 extends boolean = false >( fb: (current: Query) => QueryWhere, fc: ( query: QueryWhere ) => QueryWhere, fd: ( query: QueryWhere ) => QueryWhere, fe: ( query: QueryWhere ) => QueryWhere, ff: ( query: QueryWhere ) => QueryWhere, fg: ( query: QueryWhere ) => QueryWhere, fh: ( query: QueryWhere ) => QueryWhere, fi: ( query: QueryWhere ) => QueryWhere, fj: ( query: QueryWhere ) => QueryWhere, fk: ( query: QueryWhere ) => QueryWhere, fl: ( query: QueryWhere ) => QueryWhere, fm: ( query: QueryWhere ) => QueryWhere, fn: ( query: QueryWhere ) => QueryWhere ): ( current: QueryWhere ) => QueryWhere } export type FilterWhere = & NestedQueriesFixedRefinement & FilteringRefinements & FilterContinuations export type FilterContinuationAnd = & NestedQueriesFreeIntersectionRefinement & FilteringRefinements & FilterContinuations export type FilterContinuationOr = & NestedQueriesFreeDisjointRefinement & FilterContinuations // it does not support refinements by choice (for now) export type WhereEveryOrSome = & { < TFieldValues extends FieldValues, TFieldName extends FieldPath >( subPath: TFieldName, dude: ( current: Query ) => QueryWhere, ...dudes: (( current: QueryWhere ) => QueryWhere)[] ): ( current: Query ) => QueryWhere } & FilterContinuationsWithSubpath