import { IContext, IOperator } from "./types.js";
import { OperatorContextFunction } from "./internalTypes.js";

//#region src/operators.d.ts
declare function pipe<AI, AO = AI>(a: OperatorContextFunction<AI, AO>): IOperator<AI, AO>;
declare function pipe<A, B, C>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>): IOperator<A, C>;
declare function pipe<A, B, C, D>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>): IOperator<A, D>;
declare function pipe<A, B, C, D, E>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>): IOperator<A, E>;
declare function pipe<A, B, C, D, E, F>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>): IOperator<A, F>;
declare function pipe<A, B, C, D, E, F, G>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>, f: OperatorContextFunction<F, G>): IOperator<A, G>;
declare function pipe<A, B, C, D, E, F, G, H>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>, f: OperatorContextFunction<F, G>, g: OperatorContextFunction<G, H>): IOperator<A, H>;
declare function pipe<A, B, C, D, E, F, G, H, I>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>, f: OperatorContextFunction<F, G>, g: OperatorContextFunction<G, H>, h: OperatorContextFunction<H, I>): IOperator<A, I>;
declare function pipe<A, B, C, D, E, F, G, H, I, J>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>, f: OperatorContextFunction<F, G>, g: OperatorContextFunction<G, H>, h: OperatorContextFunction<H, I>, i: OperatorContextFunction<I, J>): IOperator<A, J>;
declare function pipe<A, B, C, D, E, F, G, H, I, J, K>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>, f: OperatorContextFunction<F, G>, g: OperatorContextFunction<G, H>, h: OperatorContextFunction<H, I>, i: OperatorContextFunction<I, J>, j: OperatorContextFunction<J, K>): IOperator<A, K>;
declare function branch<AI, AO = AI>(a: OperatorContextFunction<AI, AO>): IOperator<AI, AI>;
declare function branch<A, B, C>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>): IOperator<A, A>;
declare function branch<A, B, C, D>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>): IOperator<A, A>;
declare function branch<A, B, C, D, E>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>): IOperator<A, A>;
declare function branch<A, B, C, D, E, F>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>): IOperator<A, A>;
declare function branch<A, B, C, D, E, F, G>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>, f: OperatorContextFunction<F, G>): IOperator<A, A>;
declare function branch<A, B, C, D, E, F, G, H>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>, f: OperatorContextFunction<F, G>, g: OperatorContextFunction<G, H>): IOperator<A, A>;
declare function branch<A, B, C, D, E, F, G, H, I>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>, f: OperatorContextFunction<F, G>, g: OperatorContextFunction<G, H>, h: OperatorContextFunction<H, I>): IOperator<A, A>;
declare function branch<A, B, C, D, E, F, G, H, I, J>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>, f: OperatorContextFunction<F, G>, g: OperatorContextFunction<G, H>, h: OperatorContextFunction<H, I>, i: OperatorContextFunction<I, J>): IOperator<A, A>;
declare function branch<A, B, C, D, E, F, G, H, I, J, K>(a: OperatorContextFunction<A, B>, b: OperatorContextFunction<B, C>, c: OperatorContextFunction<C, D>, d: OperatorContextFunction<D, E>, e: OperatorContextFunction<E, F>, f: OperatorContextFunction<F, G>, g: OperatorContextFunction<G, H>, h: OperatorContextFunction<H, I>, i: OperatorContextFunction<I, J>, j: OperatorContextFunction<J, K>): IOperator<A, A>;
declare function parallel<I, O1, O2>(a: OperatorContextFunction<I, O1>, b: OperatorContextFunction<I, O2>): IOperator<I, [O1 extends Promise<infer O1R> ? O1R : O1, O2 extends Promise<infer O2R> ? O2R : O2]>;
declare function parallel<I, O1, O2, O3>(a: OperatorContextFunction<I, O1>, b: OperatorContextFunction<I, O2>, c: OperatorContextFunction<I, O3>): IOperator<I, [O1 extends Promise<infer O1R> ? O1R : O1, O2 extends Promise<infer O2R> ? O2R : O2, O3 extends Promise<infer O3R> ? O3R : O3]>;
declare function parallel<I, O1, O2, O3, O4>(a: OperatorContextFunction<I, O1>, b: OperatorContextFunction<I, O2>, c: OperatorContextFunction<I, O3>, d: OperatorContextFunction<I, O4>): IOperator<I, [O1 extends Promise<infer O1R> ? O1R : O1, O2 extends Promise<infer O2R> ? O2R : O2, O3 extends Promise<infer O3R> ? O3R : O3, O4 extends Promise<infer O4R> ? O4R : O4]>;
declare function parallel<I, O1, O2, O3, O4, O5>(a: OperatorContextFunction<I, O1>, b: OperatorContextFunction<I, O2>, c: OperatorContextFunction<I, O3>, d: OperatorContextFunction<I, O4>, e: OperatorContextFunction<I, O5>): IOperator<I, [O1 extends Promise<infer O1R> ? O1R : O1, O2 extends Promise<infer O2R> ? O2R : O2, O3 extends Promise<infer O3R> ? O3R : O3, O4 extends Promise<infer O4R> ? O4R : O4, O5 extends Promise<infer O5R> ? O5R : O5]>;
declare function parallel<I, O1, O2, O3, O4, O5, O6>(a: OperatorContextFunction<I, O1>, b: OperatorContextFunction<I, O2>, c: OperatorContextFunction<I, O3>, d: OperatorContextFunction<I, O4>, e: OperatorContextFunction<I, O5>, f: OperatorContextFunction<I, O5>): IOperator<I, [O1 extends Promise<infer O1R> ? O1R : O1, O2 extends Promise<infer O2R> ? O2R : O2, O3 extends Promise<infer O3R> ? O3R : O3, O4 extends Promise<infer O4R> ? O4R : O4, O5 extends Promise<infer O5R> ? O5R : O5, O6 extends Promise<infer O6R> ? O6R : O6]>;
declare function noop<T>(): IOperator<T, T>;
declare function filter<T>(operation: OperatorContextFunction<T, boolean>): IOperator<T, T>;
declare function catchError<T>(operation: OperatorContextFunction<Error, T>): IOperator<T, T>;
declare function tryCatch<T, K>(paths: {
  try: OperatorContextFunction<T, K>;
  catch: OperatorContextFunction<Error, K>;
}): IOperator<T, K>;
declare function fork<T extends {
  [key: string]: any;
}, M extends keyof T, K>(key: M, paths: { [U in T[M]]: OperatorContextFunction<T extends { [key in M]: U } ? T : never, K> }): IOperator<T, K>;
declare function when<T, K>(operation: OperatorContextFunction<T, boolean>, paths: {
  true: OperatorContextFunction<T, K>;
  false: OperatorContextFunction<T, K>;
}): IOperator<T, K>;
declare function wait<T>(ms: number): IOperator<T, T>;
declare function debounce<T>(ms: number): IOperator<T, T>;
declare function throttle<T>(ms: number): IOperator<T, T>;
declare function waitUntil<T, C extends IContext<{}>>(operation: (state: C['state']) => boolean): IOperator<T, T>;
//#endregion
export { branch, catchError, debounce, filter, fork, noop, parallel, pipe, throttle, tryCatch, wait, waitUntil, when };
//# sourceMappingURL=operators.d.ts.map