export type ArraySubject = Promise | A[]; export type ObjectSubject = Promise> | Record; export const all: (doc: ArraySubject | A>) => Promise; export const allValues: (doc: ObjectSubject | A>) => Promise>; export const entries: (doc: ObjectSubject | A>) => Promise<[string, A][]>; export const every: ( (fn: FilterFn, doc: ArraySubject) => Promise ) & ( (fn: FilterFn) => Every ); export type Every = (doc: ArraySubject) => Promise; export const filter: ( (fn: FilterFn, doc: ArraySubject) => Promise ) & ( (fn: FilterFn) => Filter ); export type Filter = (doc: ArraySubject) => Promise; export type FilterFn = (item: A, index: number) => Promise | boolean; export const map: ( (fn: MapFn, doc: ArraySubject) => Promise ) & ( (fn: MapFn) => Mapper ); export type Mapper = (doc: ArraySubject) => Promise; export type MapFn = (item: A, index: number) => B; export const reduce: ( (fn: ReduceFn, initialValue: B, doc: ArraySubject) => Promise ) & ( (fn: ReduceFn, initialValue: B) => Reducer ) & ( (fn: ReduceFn) => (initialValue: B) => Reducer ); export type Reducer = (doc: ArraySubject) => Promise; export type ReduceFn = (acc: B, item: A, index: number) => Promise | B; export const some: ( (fn: FilterFn, doc: ArraySubject) => Promise ) & ( (fn: FilterFn) => Some ); export type Some = (doc: ArraySubject) => Promise; export const pipeline: ( (fns: [(a: A) => B], initialValue: A) => Promise ) & ( (fns: [(a: A) => B]) => Pipeline ) & ( (fns: [ (a: A) => B, (b: B) => C ], initialValue: A) => Promise ) & ( (fns: [ (a: A) => B, (b: B) => C ]) => Pipeline ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D ], initialValue: A) => Promise ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D ]) => Pipeline ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E ], initialValue: A) => Promise ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E ]) => Pipeline ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E, (e: E) => F ], initialValue: A) => Promise ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E, (e: E) => F ]) => Pipeline ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E, (e: E) => F, (f: F) => G ], initialValue: A) => Promise ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E, (e: E) => F, (f: F) => G ]) => Pipeline ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E, (e: E) => F, (f: F) => G, (g: G) => H ], initialValue: A) => Promise ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E, (e: E) => F, (f: F) => G, (g: G) => H ]) => Pipeline ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E, (e: E) => F, (f: F) => G, (g: G) => H, (h: H) => I ], initialValue: A) => Promise ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E, (e: E) => F, (f: F) => G, (g: G) => H, (h: H) => I ]) => Pipeline ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E, (e: E) => F, (f: F) => G, (g: G) => H, (h: H) => I, ...Function[] // eslint-disable-line @typescript-eslint/ban-types ], initialValue: A) => Promise ) & ( (fns: [ (a: A) => B, (b: B) => C, (c: C) => D, (d: D) => E, (e: E) => F, (f: F) => G, (g: G) => H, (h: H) => I, ...Function[] // eslint-disable-line @typescript-eslint/ban-types ]) => Pipeline ); export type Pipeline = (initialValue: A) => Promise;