import { tail, head, AsyncItemOrSelfType, FluentAsyncIterable } from './../base'; import { ItemOrSelfType, FluentIterable } from '../base'; export type FlatJoinResult = { [head]: TResult; [tail]: T; } & Record; export type Exclusive1 = K1 extends KN ? {} : Record>; export type Exclusive2 = Exclusive1 & Exclusive1; export type Exclusive3 = Exclusive2 & Exclusive1; export type Exclusive4 = Exclusive3 & Exclusive1; export type Exclusive5 = Exclusive4 & Exclusive1; export interface FlatJoinFunction { /** * This operation flattens the whole informed path into a flat object. * Each informed param must be the name of a field in the path, the field being an iterable or not * If the name of a property appears twice in the path, the resulting object will have only the value of the first one * in the path. * @param field Specifies the name of the first field * @returns The [[FluentIterable]] of the flattened iterable. */ , K0 extends keyof R0, R1 extends ItemOrSelfType>(field: K0): FluentIterable>; , K0 extends keyof R0, R1 extends ItemOrSelfType, K1 extends keyof R1, R2 extends ItemOrSelfType>(field0: K0, field1: K1): FluentIterable & Exclusive1>; , K0 extends keyof R0, R1 extends ItemOrSelfType, K1 extends keyof R1, R2 extends ItemOrSelfType, K2 extends keyof R2, R3 extends ItemOrSelfType>(field0: K0, field1: K1, field2: K2): FluentIterable & Exclusive2>; , K0 extends keyof R0, R1 extends ItemOrSelfType, K1 extends keyof R1, R2 extends ItemOrSelfType, K2 extends keyof R2, R3 extends ItemOrSelfType, K3 extends keyof R3, R4 extends ItemOrSelfType>(field0: K0, field1: K1, field2: K2, field3: K3): FluentIterable & Exclusive3>; , K0 extends keyof R0, R1 extends ItemOrSelfType, K1 extends keyof R1, R2 extends ItemOrSelfType, K2 extends keyof R2, R3 extends ItemOrSelfType, K3 extends keyof R3, R4 extends ItemOrSelfType, K4 extends keyof R4, R5 extends ItemOrSelfType>(field0: K0, field1: K1, field2: K2, field3: K3, field4: K4): FluentIterable & Exclusive4>; , K0 extends keyof R0, R1 extends ItemOrSelfType, K1 extends keyof R1, R2 extends ItemOrSelfType, K2 extends keyof R2, R3 extends ItemOrSelfType, K3 extends keyof R3, R4 extends ItemOrSelfType, K4 extends keyof R4, R5 extends ItemOrSelfType, K5 extends keyof R5, KN extends string | number | symbol>(field0: K0, field1: K1, field2: K2, field3: K3, field4: K4, field5: K5, ...fields: KN[]): FluentIterable & Exclusive5 & Record>; } export interface AsyncFlatJoinFunction { /** * This operation flattens the whole informed path into a flat object. * Each informed param must be the name of a field in the path, the field being an iterable or not * If the name of a property appears twice in the path, the resulting object will have only the value of the first one * in the path. * @param field Specifies the name of the first field * @returns The [[FluentIterable]] of the flattened iterable. */ , K0 extends keyof R0, R1 extends AsyncItemOrSelfType>(field: K0): FluentAsyncIterable>; , K0 extends keyof R0, R1 extends AsyncItemOrSelfType, K1 extends keyof R1, R2 extends AsyncItemOrSelfType>(field0: K0, field1: K1): FluentIterable & Exclusive1>; , K0 extends keyof R0, R1 extends AsyncItemOrSelfType, K1 extends keyof R1, R2 extends AsyncItemOrSelfType, K2 extends keyof R2, R3 extends AsyncItemOrSelfType>(field0: K0, field1: K1, field2: K2): FluentAsyncIterable & Exclusive2>; , K0 extends keyof R0, R1 extends AsyncItemOrSelfType, K1 extends keyof R1, R2 extends AsyncItemOrSelfType, K2 extends keyof R2, R3 extends AsyncItemOrSelfType, K3 extends keyof R3, R4 extends AsyncItemOrSelfType>(field0: K0, field1: K1, field2: K2, field3: K3): FluentAsyncIterable & Exclusive3>; , K0 extends keyof R0, R1 extends AsyncItemOrSelfType, K1 extends keyof R1, R2 extends AsyncItemOrSelfType, K2 extends keyof R2, R3 extends AsyncItemOrSelfType, K3 extends keyof R3, R4 extends AsyncItemOrSelfType, K4 extends keyof R4, R5 extends AsyncItemOrSelfType>(field0: K0, field1: K1, field2: K2, field3: K3, field4: K4): FluentAsyncIterable & Exclusive4>; , K0 extends keyof R0, R1 extends AsyncItemOrSelfType, K1 extends keyof R1, R2 extends AsyncItemOrSelfType, K2 extends keyof R2, R3 extends AsyncItemOrSelfType, K3 extends keyof R3, R4 extends AsyncItemOrSelfType, K4 extends keyof R4, R5 extends AsyncItemOrSelfType, K5 extends keyof R5, KN extends string | number | symbol>(field0: K0, field1: K1, field2: K2, field3: K3, field4: K4, field5: K5, ...fields: KN[]): FluentAsyncIterable & Exclusive5 & Record>; }