// Type definitions for Lazy.js 0.3.2 // Project: https://github.com/dtao/lazy.js/ // Definitions by: Bart van der Schoor // Definitions: https://github.com/borisyankov/DefinitelyTyped declare function Lazy(value: string): Lazy.StringLikeSequence; declare function Lazy(value: T[]): Lazy.ArrayLikeSequence; declare function Lazy(value: any[]): Lazy.ArrayLikeSequence; declare function Lazy(value: Object): Lazy.ObjectLikeSequence; declare function Lazy(value: Object): Lazy.ObjectLikeSequence; declare module Lazy { function strict(): StrictLazy; function generate(generatorFn: GeneratorCallback, length?: number): GeneratedSequence; function range(to: number): GeneratedSequence; function range(from: number, to: number, step?: number): GeneratedSequence; function repeat(value: T, count?: number): GeneratedSequence; function on(eventType: string): Sequence; function readFile(path: string): StringLikeSequence; function makeHttpRequest(path: string): StringLikeSequence; interface StrictLazy { (value: string): StringLikeSequence; (value: T[]): ArrayLikeSequence; (value: any[]): ArrayLikeSequence; (value: Object): ObjectLikeSequence; (value: Object): ObjectLikeSequence; strict(): StrictLazy; generate(generatorFn: GeneratorCallback, length?: number): GeneratedSequence; range(to: number): GeneratedSequence; range(from: number, to: number, step?: number): GeneratedSequence; repeat(value: T, count?: number): GeneratedSequence; on(eventType: string): Sequence; readFile(path: string): StringLikeSequence; makeHttpRequest(path: string): StringLikeSequence; } interface ArrayLike { length: number; [index: number]: T; } interface Callback { (): void; } interface ErrorCallback { (error: any): void; } interface ValueCallback { (value: T): void; } interface GetKeyCallback { (value: T): string; } interface TestCallback { (value: T): boolean; } interface MapCallback { (value: T): U; } interface MapStringCallback { (value: string): string; } interface NumberCallback { (value: T): number; } interface MemoCallback { (memo: U, value: T): U; } interface GeneratorCallback { (index: number): T; } interface CompareCallback { (x: any, y: any): number; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - interface Iterator { new(sequence: Sequence): Iterator; current(): T; moveNext(): boolean; } interface GeneratedSequence extends Sequence { new(generatorFn: GeneratorCallback, length: number): GeneratedSequence; length(): number; } interface AsyncSequence extends SequenceBase { each(callback: ValueCallback): AsyncHandle; } interface AsyncHandle { cancel(): void; onComplete(callback: Callback): void; onError(callback: ErrorCallback): void; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - module Sequence { function define(methodName: string[], overrides: Object): Function; } interface Sequence extends SequenceBase { each(eachFn: ValueCallback): Sequence; } interface ArraySequence extends SequenceBase { flatten(): Sequence; } interface SequenceBase extends SequenceBaser { first(): any; first(count: number): Sequence; indexOf(value: any, startIndex?: number): Sequence; last(): any; last(count: number): Sequence; lastIndexOf(value: any): Sequence; reverse(): Sequence; } interface SequenceBaser { // TODO improve define() (needs ugly overload) async(interval: number): AsyncSequence; chunk(size: number): Sequence; compact(): Sequence; concat(var_args: T[]): Sequence; concat(sequence: Sequence): Sequence; consecutive(length: number): Sequence; contains(value: T): boolean; countBy(keyFn: GetKeyCallback): ObjectLikeSequence; countBy(propertyName: string): ObjectLikeSequence; dropWhile(predicateFn: TestCallback): Sequence; every(predicateFn: TestCallback): boolean; filter(predicateFn: TestCallback): Sequence; find(predicateFn: TestCallback): Sequence; findWhere(properties: Object): Sequence; groupBy(keyFn: GetKeyCallback): ObjectLikeSequence; initial(count?: number): Sequence; intersection(var_args: T[]): Sequence; invoke(methodName: string): Sequence; isEmpty(): boolean; join(delimiter?: string): string; map(mapFn: MapCallback): ArraySequence; map(mapFn: MapCallback): Sequence; // TODO: vscode addition to workaround strict null errors flatten(): Sequence; max(valueFn?: NumberCallback): T; min(valueFn?: NumberCallback): T; none(valueFn?: TestCallback): boolean; pluck(propertyName: string): Sequence; reduce(aggregatorFn: MemoCallback, memo?: U): U; reduceRight(aggregatorFn: MemoCallback, memo: U): U; reject(predicateFn: TestCallback): Sequence; rest(count?: number): Sequence; shuffle(): Sequence; some(predicateFn?: TestCallback): boolean; sort(sortFn?: CompareCallback, descending?: boolean): Sequence; sortBy(sortFn: string, descending?: boolean): Sequence; sortBy(sortFn: NumberCallback, descending?: boolean): Sequence; sortedIndex(value: T): Sequence; size(): number; sum(valueFn?: NumberCallback): Sequence; takeWhile(predicateFn: TestCallback): Sequence; union(var_args: T[]): Sequence; uniq(): Sequence; where(properties: Object): Sequence; without(...var_args: T[]): Sequence; without(var_args: T[]): Sequence; zip(var_args: T[]): ArraySequence; toArray(): T[]; toObject(): Object; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - module ArrayLikeSequence { function define(methodName: string[], overrides: Object): Function; } interface ArrayLikeSequence extends Sequence { // define()X; concat(var_args: T[]): ArrayLikeSequence; concat(sequence: Sequence): Sequence; first(count?: number): ArrayLikeSequence; get(index: number): T; length(): number; map(mapFn: MapCallback): ArraySequence; map(mapFn: MapCallback): ArrayLikeSequence; pop(): ArrayLikeSequence; rest(count?: number): ArrayLikeSequence; reverse(): ArrayLikeSequence; shift(): ArrayLikeSequence; slice(begin: number, end?: number): ArrayLikeSequence; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - module ObjectLikeSequence { function define(methodName: string[], overrides: Object): Function; } interface ObjectLikeSequence extends Sequence { assign(other: Object): ObjectLikeSequence; // throws error //async(): X; defaults(defaults: Object): ObjectLikeSequence; functions(): Sequence; get(property: string): ObjectLikeSequence; invert(): ObjectLikeSequence; keys(): Sequence; omit(properties: string[]): ObjectLikeSequence; pairs(): Sequence; pick(properties: string[]): ObjectLikeSequence; toArray(): T[]; toObject(): Object; values(): Sequence; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - module StringLikeSequence { function define(methodName: string[], overrides: Object): Function; } interface StringLikeSequence extends SequenceBaser { charAt(index: number): string; charCodeAt(index: number): number; contains(value: string): boolean; endsWith(suffix: string): boolean; first(): string; first(count: number): StringLikeSequence; indexOf(substring: string, startIndex?: number): number; last(): string; last(count: number): StringLikeSequence; lastIndexOf(substring: string, startIndex?: number): number; mapString(mapFn: MapStringCallback): StringLikeSequence; match(pattern: RegExp): StringLikeSequence; reverse(): StringLikeSequence; split(delimiter: string): StringLikeSequence; split(delimiter: RegExp): StringLikeSequence; startsWith(prefix: string): boolean; substring(start: number, stop?: number): StringLikeSequence; toLowerCase(): StringLikeSequence; toUpperCase(): StringLikeSequence; } } declare module 'lazy.js' { export = Lazy; }