// Type definitions for wu.js v2.1.0
// Project: https://fitzgen.github.io/wu.js/
// Definitions by: phiresky
// Definitions: https://github.com/borisyankov/DefinitelyTyped
declare module Wu {
type Consumer = (t: T) => void;
type Filter = (t: T) => boolean;
export interface WuStatic {
(iterable: Iterable): WuIterable;
// only static
chain(...iters: Iterable[]): WuIterable;
count(start?: number, step?: number): WuIterable;
curryable(fun: (...x: any[]) => T, expected?: number): any;
entries(obj: { [i: string]: T }): WuIterable<[string, T]>;
keys(obj: { [i: string]: T }): WuIterable;
values(obj: { [i: string]: T }): WuIterable;
repeat(obj: T, times?: number): WuIterable;
// also copied to WuInterface
asyncEach(fn: Consumer, maxBlock?: number, timeout?: number): void;
drop(n: number, iter: Iterable): WuIterable;
dropWhile(fn: Filter, iter: Iterable): WuIterable;
cycle(iter: Iterable): Iterable;
chunk(n: number, iter: Iterable): WuIterable;
concatMap(fn: (t: T) => Iterable, iter: Iterable): WuIterable;
dropWhile(fn: Filter, iter: Iterable): WuIterable;
enumerate(iter: Iterable): Iterable<[number, T]>;
every(fn: Filter, iter: Iterable): boolean;
filter(fn: Filter, iter: Iterable): WuIterable;
find(fn: Filter, iter: Iterable): T;
flatten(iter: Iterable): WuIterable;
flatten(shallow: boolean, iter: Iterable): WuIterable;
forEach(fn: Consumer, iter: Iterable): void;
has(t: T, iter: Iterable): boolean;
// invoke(name:string, ...t:T[], iter: Iterable<(t:T)=>U>): WuIterable;
invoke: any;
map(fn: (t: T) => U, iter: Iterable): WuIterable;
// pluck(attribute:string, iter: Iterable<{[attribute]: T}>): WuIterable;
pluck(attribute: string, iter: Iterable): WuIterable;
reduce(fn: (a: T, b: T) => T, iter: Iterable): T;
reduce(fn: (a: T, b: T) => T, initial: T, iter: Iterable): T;
reduce(fn: (a: U, b: T) => U, iter: Iterable): U;
reduce(fn: (a: U, b: T) => U, initial: U, iter: Iterable): U;
reductions(fn: (a: T, b: T) => T, iter: Iterable): WuIterable;
reductions(fn: (a: T, b: T) => T, initial: T, iter: Iterable): WuIterable;
reductions(fn: (a: U, b: T) => U, iter: Iterable): WuIterable;
reductions(fn: (a: U, b: T) => U, initial: U, iter: Iterable): WuIterable;
reject(fn: Filter, iter: Iterable): WuIterable;
slice(iter: Iterable): WuIterable;
slice(start: number, iter: Iterable): WuIterable;
slice(start: number, stop: number, iter: Iterable): WuIterable;
some(fn: Filter, iter: Iterable): WuIterable;
spreadMap(fn: (...x: any[]) => T, iter: Iterable): WuIterable;
take(n: number, iter: Iterable): WuIterable;
takeWhile(fn: Filter, iter: Iterable): WuIterable;
tap(fn: Consumer, iter: Iterable): WuIterable;
unique(iter: Iterable): WuIterable;
zip(iter2: Iterable, iter: Iterable): WuIterable<[T, U]>;
zipLongest(iter2: Iterable, iter: Iterable): WuIterable<[T, U]>;
zipWith: any;
unzip: any;
tee(iter: Iterable): WuIterable[];
tee(n: number, iter: Iterable): WuIterable[];
}
export interface WuIterable extends IterableIterator {
// generated from section "copied to WuIterable" above via
// sed -r 's/(, )?iter: Iterable<\w+>//' |
// sed -r 's/^(\s+\w+)/\1/' |
// sed -r 's/^(\s+\w+)(fn: Consumer, maxBlock?: number, timeout?: number): any;
drop(n: number): WuIterable;
dropWhile(fn: Filter): WuIterable;
cycle(): Iterable;
chunk(n: number): WuIterable;
concatMap(fn: (t: T) => Iterable): WuIterable;
dropWhile(fn: Filter): WuIterable;
enumerate(): Iterable<[number, T]>;
every(fn: Filter): boolean;
filter(fn: Filter): WuIterable;
find(fn: Filter): T;
flatten(): WuIterable;
flatten(shallow: boolean): WuIterable;
forEach(fn: Consumer): void;
has(t: T): boolean;
// invoke(name:string, ...t:T[], iter: Iterable<(t:T)=>U>): WuIterable;
invoke: any;
map(fn: (t: T) => U): WuIterable;
// pluck(attribute:string, iter: Iterable<{[attribute]: T}>): WuIterable;
pluck(attribute: string): WuIterable;
reduce(fn: (a: T, b: T) => T): T;
reduce(fn: (a: T, b: T) => T, initial: T): T;
reduce(fn: (a: U, b: T) => U): U;
reduce(fn: (a: U, b: T) => U, initial: U): U;
reductions(fn: (a: T, b: T) => T): WuIterable;
reductions(fn: (a: T, b: T) => T, initial: T): WuIterable;
reductions(fn: (a: U, b: T) => U): WuIterable;
reductions(fn: (a: U, b: T) => U, initial: U): WuIterable;
reject(fn: Filter): WuIterable;
slice(): WuIterable;
slice(start: number): WuIterable;
slice(start: number, stop: number): WuIterable;
some(fn: Filter): WuIterable;
spreadMap(fn: (...x: any[]) => T, iter: Iterable): WuIterable;
take(n: number): WuIterable;
takeWhile(fn: Filter): WuIterable;
tap(fn: Consumer): WuIterable;
unique(): WuIterable;
zip(iter2: Iterable): WuIterable<[T, U]>;
zipLongest(iter2: Iterable): WuIterable<[T, U]>;
zipWith: any;
unzip: any;
tee(): WuIterable[];
tee(n: number): WuIterable[];
}
}
declare var wu: Wu.WuStatic;