From 28172b852ee7e036c026fa51bf89d334a4efad5d Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 21:44:04 +0100 Subject: [PATCH 01/14] Introduct generic Enumerable type --- linq/linq.d.ts | 233 +++++++++++++++++++++++++------------------------ 1 file changed, 117 insertions(+), 116 deletions(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index d155ba806..3650ef028 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -1,3 +1,4 @@ +/// // Type definitions for linq.js 2.2 // Project: http://linqjs.codeplex.com/ // Definitions by: Marcin Najder @@ -8,107 +9,107 @@ declare module linq { interface EnumerableStatic { - Choice(...contents: any[]): Enumerable; - Choice(contents: any[]): Enumerable; - Cycle(...contents: any[]): Enumerable; - Cycle(contents: any[]): Enumerable; - Empty(): Enumerable; - From(obj: any[]): Enumerable; - From(obj: any): Enumerable; - Return(element: any): Enumerable; - Matches(input: string, pattern: RegExp): Enumerable; - Matches(input: string, pattern: string, flags?: string): Enumerable; - Range(start: number, count: number, step?: number): Enumerable; - RangeDown(start: number, count: number, step?: number): Enumerable; - RangeTo(start: number, to: number, step?: number): Enumerable; - Repeat(obj: any, count?: number): Enumerable; - RepeatWithFinalize(initializer: () => any, finalizer: (resource: any) =>void ): Enumerable; - Generate(func: () => any, count?: number): Enumerable; - Generate(func: string, count?: number): Enumerable; - ToInfinity(start?: number, step?: number): Enumerable; - ToNegativeInfinity(start?: number, step?: number): Enumerable; - Unfold(seed, func: ($) => any): Enumerable; - Unfold(seed, func: string): Enumerable; + Choice(...contents: any[]): Enumerable; + Choice(contents: any[]): Enumerable; + Cycle(...contents: any[]): Enumerable; + Cycle(contents: any[]): Enumerable; + Empty(): Enumerable; + From(obj: any[]): Enumerable; + From(obj: any): Enumerable; + Return(element: any): Enumerable; + Matches(input: string, pattern: RegExp): Enumerable; + Matches(input: string, pattern: string, flags?: string): Enumerable; + Range(start: number, count: number, step?: number): Enumerable; + RangeDown(start: number, count: number, step?: number): Enumerable; + RangeTo(start: number, to: number, step?: number): Enumerable; + Repeat(obj: any, count?: number): Enumerable; + RepeatWithFinalize(initializer: () => any, finalizer: (resource: any) =>void ): Enumerable; + Generate(func: () => any, count?: number): Enumerable; + Generate(func: string, count?: number): Enumerable; + ToInfinity(start?: number, step?: number): Enumerable; + ToNegativeInfinity(start?: number, step?: number): Enumerable; + Unfold(seed, func: ($) => any): Enumerable; + Unfold(seed, func: string): Enumerable; } - interface Enumerable { + interface Enumerable { //Projection and Filtering Methods - CascadeBreadthFirst(func: ($) => any[], resultSelector: (v, i: number) => any): Enumerable; - CascadeBreadthFirst(func: string, resultSelector: string): Enumerable; - CascadeDepthFirst(func: ($) => any[], resultSelector: (v, i: number) => any): Enumerable; - CascadeDepthFirst(func: string, resultSelector: string): Enumerable; - Flatten(...items: any[]): Enumerable; - Pairwise(selector: (prev, next) => any): Enumerable; - Pairwise(selector: string): Enumerable; - Scan(func: (a, b) => any): Enumerable; - Scan(func: string): Enumerable; - Scan(seed, func: (a, b) => any, resultSelector?: ($) => any): Enumerable; - Scan(seed, func: string, resultSelector?: string): Enumerable; - Select(selector: ($, i: number) => any): Enumerable; - Select(selector: string): Enumerable; - SelectMany(collectionSelector: ($, i: number) => any[], resultSelector?: ($, item) => any): Enumerable; - SelectMany(collectionSelector: ($, i: number) => Enumerable, resultSelector?: ($, item) => any): Enumerable; - SelectMany(collectionSelector: string, resultSelector?: string): Enumerable; - Where(predicate: ($, i: number) => boolean): Enumerable; - Where(predicate: string): Enumerable; - OfType(type: Function): Enumerable; - Zip(second: any[], selector: (v1, v2, i: number) => any): Enumerable; - Zip(second: any[], selector: string): Enumerable; - Zip(second: Enumerable, selector: (v1, v2, i: number) => any): Enumerable; - Zip(second: Enumerable, selector: string): Enumerable; + CascadeBreadthFirst(func: ($) => any[], resultSelector: (v, i: number) => any): Enumerable; + CascadeBreadthFirst(func: string, resultSelector: string): Enumerable; + CascadeDepthFirst(func: ($) => any[], resultSelector: (v, i: number) => any): Enumerable; + CascadeDepthFirst(func: string, resultSelector: string): Enumerable; + Flatten(...items: any[]): Enumerable; + Pairwise(selector: (prev, next) => any): Enumerable; + Pairwise(selector: string): Enumerable; + Scan(func: (a, b) => any): Enumerable; + Scan(func: string): Enumerable; + Scan(seed, func: (a, b) => any, resultSelector?: ($) => any): Enumerable; + Scan(seed, func: string, resultSelector?: string): Enumerable; + Select(selector: ($, i: number) => any): Enumerable; + Select(selector: string): Enumerable; + SelectMany(collectionSelector: ($, i: number) => any[], resultSelector?: ($, item) => any): Enumerable; + SelectMany(collectionSelector: ($, i: number) => Enumerable, resultSelector?: ($, item) => any): Enumerable; + SelectMany(collectionSelector: string, resultSelector?: string): Enumerable; + Where(predicate: ($, i: number) => boolean): Enumerable; + Where(predicate: string): Enumerable; + OfType(type: Function): Enumerable; + Zip(second: any[], selector: (v1, v2, i: number) => any): Enumerable; + Zip(second: any[], selector: string): Enumerable; + Zip(second: Enumerable, selector: (v1, v2, i: number) => any): Enumerable; + Zip(second: Enumerable, selector: string): Enumerable; //Join Methods - Join(inner: any[], outerKeySelector: (v1) => any, innerKeySelector: (v1) => any, resultSelector: (v1, v2) => any, compareSelector?: (v) => any): Enumerable; - Join(inner: any[], outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; - Join(inner: Enumerable, outerKeySelector: (v1) => any, innerKeySelector: (v1) => any, resultSelector: (v1, v2) => any, compareSelector?: (v) => any): Enumerable; - Join(inner: Enumerable, outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; - GroupJoin(inner: any[], outerKeySelector: (v1) => any, innerKeySelector: (v1) => any, resultSelector: (v1, v2: Enumerable) => any, compareSelector?: (v) => any): Enumerable; - GroupJoin(inner: any[], outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; - GroupJoin(inner: Enumerable, outerKeySelector: (v1) => any, innerKeySelector: (v1) => any, resultSelector: (v1, v2: Enumerable) => any, compareSelector?: (v) => any): Enumerable; - GroupJoin(inner: Enumerable, outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; + Join(inner: any[], outerKeySelector: (v1) => any, innerKeySelector: (v1) => any, resultSelector: (v1, v2) => any, compareSelector?: (v) => any): Enumerable; + Join(inner: any[], outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; + Join(inner: Enumerable, outerKeySelector: (v1) => any, innerKeySelector: (v1) => any, resultSelector: (v1, v2) => any, compareSelector?: (v) => any): Enumerable; + Join(inner: Enumerable, outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; + GroupJoin(inner: any[], outerKeySelector: (v1) => any, innerKeySelector: (v1) => any, resultSelector: (v1, v2: Enumerable) => any, compareSelector?: (v) => any): Enumerable; + GroupJoin(inner: any[], outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; + GroupJoin(inner: Enumerable, outerKeySelector: (v1) => any, innerKeySelector: (v1) => any, resultSelector: (v1, v2: Enumerable) => any, compareSelector?: (v) => any): Enumerable; + GroupJoin(inner: Enumerable, outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; //Set Methods All(predicate: ($) => boolean): boolean; All(predicate: string): boolean; Any(predicate?: ($) => boolean): boolean; Any(predicate?: string): boolean; - Concat(second: any[]): Enumerable; - Concat(second: Enumerable): Enumerable; - Insert(index: number, second: any[]): Enumerable; - Insert(index: number, second: Enumerable): Enumerable; - Alternate(value): Enumerable; + Concat(second: any[]): Enumerable; + Concat(second: Enumerable): Enumerable; + Insert(index: number, second: any[]): Enumerable; + Insert(index: number, second: Enumerable): Enumerable; + Alternate(value): Enumerable; Contains(value, compareSelector?: ($) => any): boolean; Contains(value, compareSelector?: string): boolean; - DefaultIfEmpty(defaultValue): Enumerable; - Distinct(compareSelector?: ($) => any): Enumerable; - Distinct(compareSelector?: string): Enumerable; - Except(second: any[], compareSelector?: ($) => any): Enumerable; - Except(second: any[], compareSelector?: string): Enumerable; - Except(second: Enumerable, compareSelector?: ($) => any): Enumerable; - Except(second: Enumerable, compareSelector?: string): Enumerable; - Intersect(second: any[], compareSelector?: ($) => any): Enumerable; - Intersect(second: any[], compareSelector?: string): Enumerable; - Intersect(second: Enumerable, compareSelector?: ($) => any): Enumerable; - Intersect(second: Enumerable, compareSelector?: string): Enumerable; + DefaultIfEmpty(defaultValue): Enumerable; + Distinct(compareSelector?: ($) => any): Enumerable; + Distinct(compareSelector?: string): Enumerable; + Except(second: any[], compareSelector?: ($) => any): Enumerable; + Except(second: any[], compareSelector?: string): Enumerable; + Except(second: Enumerable, compareSelector?: ($) => any): Enumerable; + Except(second: Enumerable, compareSelector?: string): Enumerable; + Intersect(second: any[], compareSelector?: ($) => any): Enumerable; + Intersect(second: any[], compareSelector?: string): Enumerable; + Intersect(second: Enumerable, compareSelector?: ($) => any): Enumerable; + Intersect(second: Enumerable, compareSelector?: string): Enumerable; SequenceEqual(second: any[], compareSelector?: ($) => any): boolean; SequenceEqual(second: any[], compareSelector?: string): boolean; - SequenceEqual(second: Enumerable, compareSelector?: ($) => any): boolean; - SequenceEqual(second: Enumerable, compareSelector?: string): boolean; - Union(second: any[], compareSelector?: ($) => any): Enumerable; - Union(second: any[], compareSelector?: string): Enumerable; - Union(second: Enumerable, compareSelector?: ($) => any): Enumerable; - Union(second: Enumerable, compareSelector?: string): Enumerable; + SequenceEqual(second: Enumerable, compareSelector?: ($) => any): boolean; + SequenceEqual(second: Enumerable, compareSelector?: string): boolean; + Union(second: any[], compareSelector?: ($) => any): Enumerable; + Union(second: any[], compareSelector?: string): Enumerable; + Union(second: Enumerable, compareSelector?: ($) => any): Enumerable; + Union(second: Enumerable, compareSelector?: string): Enumerable; //Ordering Methods - OrderBy(keySelector?: ($) => any): OrderedEnumerable; - OrderBy(keySelector?: string): OrderedEnumerable; - OrderByDescending(keySelector?: ($) => any): OrderedEnumerable; - OrderByDescending(keySelector?: string): OrderedEnumerable; - Reverse(): Enumerable; - Shuffle(): Enumerable; + OrderBy(keySelector?: ($) => any): OrderedEnumerable; + OrderBy(keySelector?: string): OrderedEnumerable; + OrderByDescending(keySelector?: ($) => any): OrderedEnumerable; + OrderByDescending(keySelector?: string): OrderedEnumerable; + Reverse(): Enumerable; + Shuffle(): Enumerable; //Grouping Methods - GroupBy(keySelector: ($) => any, elementSelector?: ($) => any, resultSelector?: (key, e) => any, compareSelector?: ($) =>any): Enumerable; - GroupBy(keySelector: string, elementSelector?: string, resultSelector?: string, compareSelector?: string): Enumerable; - PartitionBy(keySelector: ($) => any, elementSelector?: ($) => any, resultSelector?: (key, e) => any, compareSelector?: ($) =>any): Enumerable; - PartitionBy(keySelector: string, elementSelector?: string, resultSelector?: string, compareSelector?: string): Enumerable; - BufferWithCount(count: number): Enumerable; + GroupBy(keySelector: ($) => any, elementSelector?: ($) => any, resultSelector?: (key, e) => any, compareSelector?: ($) =>any): Enumerable; + GroupBy(keySelector: string, elementSelector?: string, resultSelector?: string, compareSelector?: string): Enumerable; + PartitionBy(keySelector: ($) => any, elementSelector?: ($) => any, resultSelector?: (key, e) => any, compareSelector?: ($) =>any): Enumerable; + PartitionBy(keySelector: string, elementSelector?: string, resultSelector?: string, compareSelector?: string): Enumerable; + BufferWithCount(count: number): Enumerable; // Aggregate Methods Aggregate(func: (a, b) => any); Aggregate(seed, func: (a, b) => any, resultSelector?: ($) => any); @@ -143,14 +144,14 @@ declare module linq { Single(predicate?: string): any; SingleOrDefault(defaultValue, predicate?: ($) => boolean): any; SingleOrDefault(defaultValue, predicate?: string): any; - Skip(count: number): Enumerable; - SkipWhile(predicate: ($, i: number) => boolean): Enumerable; - SkipWhile(predicate: string): Enumerable; - Take(count: number): Enumerable; - TakeWhile(predicate: ($, i: number) => boolean): Enumerable; - TakeWhile(predicate: string): Enumerable; - TakeExceptLast(count?: number): Enumerable; - TakeFromLast(count: number): Enumerable; + Skip(count: number): Enumerable; + SkipWhile(predicate: ($, i: number) => boolean): Enumerable; + SkipWhile(predicate: string): Enumerable; + Take(count: number): Enumerable; + TakeWhile(predicate: ($, i: number) => boolean): Enumerable; + TakeWhile(predicate: string): Enumerable; + TakeExceptLast(count?: number): Enumerable; + TakeFromLast(count: number): Enumerable; IndexOf(item): number; LastIndexOf(item): number; // Convert Methods @@ -166,8 +167,8 @@ declare module linq { ToString(separator?: string, selector?: ($) =>any): string; ToString(separator?: string, selector?: string): string; //Action Methods - Do(action: ($, i: number) => void ): Enumerable; - Do(action: string): Enumerable; + Do(action: ($, i: number) => void ): Enumerable; + Do(action: string): Enumerable; ForEach(action: ($, i: number) => void ): void; ForEach(func: ($, i: number) => boolean): void; ForEach(action_func: string): void; @@ -176,38 +177,38 @@ declare module linq { WriteLine(selector?: ($) =>any): void; Force(): void; //Functional Methods - Let(func: (e: Enumerable) => Enumerable): Enumerable; - Share(): Enumerable; - MemoizeAll(): Enumerable; + Let(func: (e: Enumerable) => Enumerable): Enumerable; + Share(): Enumerable; + MemoizeAll(): Enumerable; //Error Handling Methods - Catch(handler: (error: Error) => void ): Enumerable; - Catch(handler: string): Enumerable; - Finally(finallyAction: () => void ): Enumerable; - Finally(finallyAction: string): Enumerable; + Catch(handler: (error: Error) => void ): Enumerable; + Catch(handler: string): Enumerable; + Finally(finallyAction: () => void ): Enumerable; + Finally(finallyAction: string): Enumerable; //For Debug Methods - Trace(message?: string, selector?: ($) =>any): Enumerable; - Trace(message?: string, selector?: string): Enumerable; + Trace(message?: string, selector?: ($) =>any): Enumerable; + Trace(message?: string, selector?: string): Enumerable; } - interface OrderedEnumerable extends Enumerable { - ThenBy(keySelector: ($) => any): OrderedEnumerable; - ThenBy(keySelector: string): OrderedEnumerable; - ThenByDescending(keySelector: ($) => any): OrderedEnumerable; - ThenByDescending(keySelector: string): OrderedEnumerable; + interface OrderedEnumerable extends Enumerable { + ThenBy(keySelector: ($) => T): OrderedEnumerable; + ThenBy(keySelector: string): OrderedEnumerable; + ThenByDescending(keySelector: ($) => T): OrderedEnumerable; + ThenByDescending(keySelector: T): OrderedEnumerable; } - interface Grouping extends Enumerable { + interface Grouping extends Enumerable { Key(); } - interface Lookup { + interface Lookup { Count(): number; - Get(key): Enumerable; + Get(key): Enumerable; Contains(key): boolean; - ToEnumerable(): Enumerable; + ToEnumerable(): Enumerable; } - interface Dictionary { + interface Dictionary { Add(key, value): void; Get(key): any; Set(key, value): boolean; @@ -215,7 +216,7 @@ declare module linq { Clear(): void; Remove(key): void; Count(): number; - ToEnumerable(): Enumerable; + ToEnumerable(): Enumerable; } } From 015f5891dc3f0cc24f9793114651a33d74da489a Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 21:45:17 +0100 Subject: [PATCH 02/14] Generic enumerable factory --- linq/linq.d.ts | 46 +++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index 3650ef028..7c8027f04 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -9,26 +9,29 @@ declare module linq { interface EnumerableStatic { - Choice(...contents: any[]): Enumerable; - Choice(contents: any[]): Enumerable; - Cycle(...contents: any[]): Enumerable; - Cycle(contents: any[]): Enumerable; - Empty(): Enumerable; - From(obj: any[]): Enumerable; - From(obj: any): Enumerable; - Return(element: any): Enumerable; - Matches(input: string, pattern: RegExp): Enumerable; - Matches(input: string, pattern: string, flags?: string): Enumerable; - Range(start: number, count: number, step?: number): Enumerable; - RangeDown(start: number, count: number, step?: number): Enumerable; - RangeTo(start: number, to: number, step?: number): Enumerable; - Repeat(obj: any, count?: number): Enumerable; - RepeatWithFinalize(initializer: () => any, finalizer: (resource: any) =>void ): Enumerable; - Generate(func: () => any, count?: number): Enumerable; + Choice(...contents: T[]): Enumerable; + Choice(contents: T[]): Enumerable; + Cycle(...contents: T[]): Enumerable; + Cycle(contents: T[]): Enumerable; + Empty(): Enumerable; + From(obj: T[]): Enumerable; + From(obj: number): Enumerable; // input number returns single number + From(obj: string): Enumerable; // input string returns sequence of characters + From(obj: NodeList): Enumerable; // node list returns sequence of nodes + From(obj: Object): Enumerable>; // object returns sequence of key/value pairs + Return(element: T): Enumerable; + Matches(input: string, pattern: RegExp): Enumerable; + Matches(input: string, pattern: string, flags?: string): Enumerable; + Range(start: number, count: number, step?: number): Enumerable; + RangeDown(start: number, count: number, step?: number): Enumerable; + RangeTo(start: number, to: number, step?: number): Enumerable; + Repeat(obj: any, count?: number): Enumerable; + RepeatWithFinalize(initializer: () => T, finalizer: (resource: T) => void): Enumerable; + Generate(func: () => T, count?: number): Enumerable; Generate(func: string, count?: number): Enumerable; - ToInfinity(start?: number, step?: number): Enumerable; - ToNegativeInfinity(start?: number, step?: number): Enumerable; - Unfold(seed, func: ($) => any): Enumerable; + ToInfinity(start?: number, step?: number): Enumerable; + ToNegativeInfinity(start?: number, step?: number): Enumerable; + Unfold(seed, func: ($) => T): Enumerable; Unfold(seed, func: string): Enumerable; } @@ -218,6 +221,11 @@ declare module linq { Count(): number; ToEnumerable(): Enumerable; } + + interface KeyValuePair { + Key: TKey; + Value: TValue; + } } declare var Enumerable: linq.EnumerableStatic; From c057f9e3a45dc0cbb63f3ce3fe1870605a49d8c4 Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 21:45:59 +0100 Subject: [PATCH 03/14] Implement 'Select' --- linq/linq.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index 7c8027f04..12bf13bd4 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -48,7 +48,7 @@ declare module linq { Scan(func: string): Enumerable; Scan(seed, func: (a, b) => any, resultSelector?: ($) => any): Enumerable; Scan(seed, func: string, resultSelector?: string): Enumerable; - Select(selector: ($, i: number) => any): Enumerable; + Select(selector: ($: T, i: number) => TResult): Enumerable; Select(selector: string): Enumerable; SelectMany(collectionSelector: ($, i: number) => any[], resultSelector?: ($, item) => any): Enumerable; SelectMany(collectionSelector: ($, i: number) => Enumerable, resultSelector?: ($, item) => any): Enumerable; From 58a9072ad4c18d911a077f19d974145d122bc685 Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 22:03:00 +0100 Subject: [PATCH 04/14] Implementation of Where --- linq/linq.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index 12bf13bd4..d3b11e28a 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -53,7 +53,7 @@ declare module linq { SelectMany(collectionSelector: ($, i: number) => any[], resultSelector?: ($, item) => any): Enumerable; SelectMany(collectionSelector: ($, i: number) => Enumerable, resultSelector?: ($, item) => any): Enumerable; SelectMany(collectionSelector: string, resultSelector?: string): Enumerable; - Where(predicate: ($, i: number) => boolean): Enumerable; + Where(predicate: ($ : T, i: number) => boolean): Enumerable; Where(predicate: string): Enumerable; OfType(type: Function): Enumerable; Zip(second: any[], selector: (v1, v2, i: number) => any): Enumerable; From 625ecbda5bc5f559d968db9bff509b6dad9ebab6 Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 22:09:07 +0100 Subject: [PATCH 05/14] Implement All, Any, OrderBy, Reverse, Shuffle --- linq/linq.d.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index d3b11e28a..bea5bd464 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -70,9 +70,9 @@ declare module linq { GroupJoin(inner: Enumerable, outerKeySelector: (v1) => any, innerKeySelector: (v1) => any, resultSelector: (v1, v2: Enumerable) => any, compareSelector?: (v) => any): Enumerable; GroupJoin(inner: Enumerable, outerKeySelector: string, innerKeySelector: string, resultSelector: string, compareSelector?: string): Enumerable; //Set Methods - All(predicate: ($) => boolean): boolean; + All(predicate: ($ : T) => boolean): boolean; All(predicate: string): boolean; - Any(predicate?: ($) => boolean): boolean; + Any(predicate?: ($: T) => boolean): boolean; Any(predicate?: string): boolean; Concat(second: any[]): Enumerable; Concat(second: Enumerable): Enumerable; @@ -101,12 +101,12 @@ declare module linq { Union(second: Enumerable, compareSelector?: ($) => any): Enumerable; Union(second: Enumerable, compareSelector?: string): Enumerable; //Ordering Methods - OrderBy(keySelector?: ($) => any): OrderedEnumerable; - OrderBy(keySelector?: string): OrderedEnumerable; - OrderByDescending(keySelector?: ($) => any): OrderedEnumerable; - OrderByDescending(keySelector?: string): OrderedEnumerable; - Reverse(): Enumerable; - Shuffle(): Enumerable; + OrderBy(keySelector?: ($: T) => any): OrderedEnumerable; + OrderBy(keySelector?: string): OrderedEnumerable; + OrderByDescending(keySelector?: ($) => any): OrderedEnumerable; + OrderByDescending(keySelector?: string): OrderedEnumerable; + Reverse(): Enumerable; + Shuffle(): Enumerable; //Grouping Methods GroupBy(keySelector: ($) => any, elementSelector?: ($) => any, resultSelector?: (key, e) => any, compareSelector?: ($) =>any): Enumerable; GroupBy(keySelector: string, elementSelector?: string, resultSelector?: string, compareSelector?: string): Enumerable; From 85b9273a89c0910a5656cb996a4e55a6f06fbe00 Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 22:13:19 +0100 Subject: [PATCH 06/14] Max / Min / MaxBy / MinBy --- linq/linq.d.ts | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index bea5bd464..fb03173ce 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -122,13 +122,25 @@ declare module linq { Average(selector?: string): number; Count(predicate?: ($) => boolean): number; Count(predicate?: string): number; - Max(selector?: ($) => number): number; - Max(selector?: string): number; - Min(selector?: ($) => number): number; - Min(selector?: string): number; - MaxBy(selector: ($) => number): any; + Max(selector?: ($: T) => any): any; + Max(selector?: ($: T) => Date): Date; + Max(selector?: ($: T) => number): number; + Max(selector: ($: T) => string): string; + Max(selector?: string): any; + Min(selector?: ($: T) => any): any; + Min(selector?: ($: T) => Date): Date; + Min(selector: ($: T) => string): string; + Min(selector?: ($: T) => number): number; + Min(selector?: string): any; + MaxBy(selector: ($: T) => any): any; + MaxBy(selector: ($: T) => string): string; + MaxBy(selector: ($: T) => Date): Date; + MaxBy(selector: ($: T) => number): number; MaxBy(selector: string): any; - MinBy(selector: ($) => number): any; + MinBy(selector: ($: T) => Date): Date; + MinBy(selector: ($: T) => number): any; + MinBy(selector: ($: T) => string): string; + MinBy(selector: ($: T) => any): any; MinBy(selector: string): any; Sum(selector?: ($) => number): number; Sum(selector?: string): number; From e53b4ac5d6ab6dcdbf52c2fffcc3fd8cef442d17 Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 22:15:07 +0100 Subject: [PATCH 07/14] First/Single/Last and Default friends --- linq/linq.d.ts | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index fb03173ce..628402a3c 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -145,20 +145,20 @@ declare module linq { Sum(selector?: ($) => number): number; Sum(selector?: string): number; //Paging Methods - ElementAt(index: number): any; - ElementAtOrDefault(index: number, defaultValue): any; - First(predicate?: ($) => boolean): any; - First(predicate?: string): any; - FirstOrDefault(defaultValue, predicate?: ($) => boolean): any; - FirstOrDefault(defaultValue, predicate?: string): any; - Last(predicate?: ($) => boolean): any; - Last(predicate?: string): any; - LastOrDefault(defaultValue, predicate?: ($) => boolean): any; - LastOrDefault(defaultValue, predicate?: string): any; - Single(predicate?: ($) => boolean): any; - Single(predicate?: string): any; - SingleOrDefault(defaultValue, predicate?: ($) => boolean): any; - SingleOrDefault(defaultValue, predicate?: string): any; + ElementAt(index: number): T; + ElementAtOrDefault(index: number, defaultValue: T): T; + First(predicate?: ($: T) => boolean): T; + First(predicate?: string): T; + FirstOrDefault(defaultValue: T, predicate?: ($: T) => boolean): T; + FirstOrDefault(defaultValue: T, predicate?: string): T; + Last(predicate?: ($: T) => boolean): T; + Last(predicate?: string): T; + LastOrDefault(defaultValue: T, predicate?: ($: T) => boolean): T; + LastOrDefault(defaultValue: T, predicate?: string): T; + Single(predicate?: ($: T) => boolean): T; + Single(predicate?: string): T; + SingleOrDefault(defaultValue: T, predicate?: ($: T) => boolean): T; + SingleOrDefault(defaultValue: T, predicate?: string): T; Skip(count: number): Enumerable; SkipWhile(predicate: ($, i: number) => boolean): Enumerable; SkipWhile(predicate: string): Enumerable; From 99e44830c31699078acf003d391ef2f2c264a30d Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 22:16:08 +0100 Subject: [PATCH 08/14] Lookup --- linq/linq.d.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index 628402a3c..a0aff5350 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -171,12 +171,12 @@ declare module linq { LastIndexOf(item): number; // Convert Methods ToArray(): any[]; - ToLookup(keySelector: ($) => any, elementSelector?: ($) => any, compareSelector?: (key) => any): Lookup; - ToLookup(keySelector: string, elementSelector?: string, compareSelector?: string): Lookup; + ToLookup(keySelector: ($) => any, elementSelector?: ($) => any, compareSelector?: (key) => any): Lookup; + ToLookup(keySelector: string, elementSelector?: string, compareSelector?: string): Lookup; ToObject(keySelector: ($) => string, elementSelector: ($) => any): any; ToObject(keySelector: string, elementSelector: string): any; - ToDictionary(keySelector: ($) => any, elementSelector: ($) => any, compareSelector?: (key) => any): Dictionary; - ToDictionary(keySelector: string, elementSelector: string, compareSelector?: string): Dictionary; + ToDictionary(keySelector: ($) => any, elementSelector: ($) => any, compareSelector?: (key) => any): Dictionary; + ToDictionary(keySelector: string, elementSelector: string, compareSelector?: string): Dictionary; ToJSON(replacer?: (key, value) => any, space?: number): string; ToJSON(replacer?: string, space?: number): string; ToString(separator?: string, selector?: ($) =>any): string; From 01c982eee56b0c4cf48a17d29544d17731b30fd7 Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 22:16:36 +0100 Subject: [PATCH 09/14] Foreach --- linq/linq.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index a0aff5350..f488c999c 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -184,8 +184,8 @@ declare module linq { //Action Methods Do(action: ($, i: number) => void ): Enumerable; Do(action: string): Enumerable; - ForEach(action: ($, i: number) => void ): void; - ForEach(func: ($, i: number) => boolean): void; + ForEach(action: ($: T, i: number) => void ): void; + ForEach(func: ($: T, i: number) => boolean): void; ForEach(action_func: string): void; Write(separator?: string, selector?: ($) =>any): void; Write(separator?: string, selector?: string): void; From 276fd048ab8de7d6b83751df8136df17525c159d Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 22:17:02 +0100 Subject: [PATCH 10/14] ToArray --- linq/linq.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index f488c999c..d69c50769 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -170,7 +170,7 @@ declare module linq { IndexOf(item): number; LastIndexOf(item): number; // Convert Methods - ToArray(): any[]; + ToArray(): T[]; ToLookup(keySelector: ($) => any, elementSelector?: ($) => any, compareSelector?: (key) => any): Lookup; ToLookup(keySelector: string, elementSelector?: string, compareSelector?: string): Lookup; ToObject(keySelector: ($) => string, elementSelector: ($) => any): any; From 5786da844ce92c320ef6acb3938282aba23aab09 Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 22:17:42 +0100 Subject: [PATCH 11/14] Fix test for new Grouping definition --- linq/linq-tests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linq/linq-tests.ts b/linq/linq-tests.ts index b89625481..1fdd731cf 100644 --- a/linq/linq-tests.ts +++ b/linq/linq-tests.ts @@ -30,7 +30,7 @@ describe("Linq.js tests", function () { it("Grouping Methods", function () { expect(Enumerable.From(["a","aa","aaa","a","a","aaa"]) .GroupBy((item:string) => item.length) - .Select((g: linq.Grouping) => { return { key: g.Key(), count: g.Count() }; }) + .Select((g: linq.Grouping) => { return { key: g.Key(), count: g.Count() }; }) .OrderBy(g => g.key) .Select(g => g.key+":"+g.count) .ToString(",")).toBe("1:3,2:1,3:2"); From cc46b6678ad3e05f9f0493df656f784c36f25afd Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 22:18:45 +0100 Subject: [PATCH 12/14] Take/Skip and friends --- linq/linq.d.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index d69c50769..392839681 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -159,14 +159,14 @@ declare module linq { Single(predicate?: string): T; SingleOrDefault(defaultValue: T, predicate?: ($: T) => boolean): T; SingleOrDefault(defaultValue: T, predicate?: string): T; - Skip(count: number): Enumerable; - SkipWhile(predicate: ($, i: number) => boolean): Enumerable; - SkipWhile(predicate: string): Enumerable; - Take(count: number): Enumerable; - TakeWhile(predicate: ($, i: number) => boolean): Enumerable; - TakeWhile(predicate: string): Enumerable; - TakeExceptLast(count?: number): Enumerable; - TakeFromLast(count: number): Enumerable; + Skip(count: number): Enumerable; + SkipWhile(predicate: ($: T, i: number) => boolean): Enumerable; + SkipWhile(predicate: string): Enumerable; + Take(count: number): Enumerable; + TakeWhile(predicate: ($: T, i: number) => boolean): Enumerable; + TakeWhile(predicate: string): Enumerable; + TakeExceptLast(count?: number): Enumerable; + TakeFromLast(count: number): Enumerable; IndexOf(item): number; LastIndexOf(item): number; // Convert Methods From 392a715f8577e18ab4efe4ccde594beb02969984 Mon Sep 17 00:00:00 2001 From: Sebazzz Date: Tue, 18 Nov 2014 22:22:44 +0100 Subject: [PATCH 13/14] Somehow a reference line got inserted by Visual Studio? Reverted! --- linq/linq.d.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index 392839681..ce02870ad 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -1,4 +1,3 @@ -/// // Type definitions for linq.js 2.2 // Project: http://linqjs.codeplex.com/ // Definitions by: Marcin Najder From efa63acc2030744733d2715a43f0e7b153206410 Mon Sep 17 00:00:00 2001 From: Sebastiaan Dammann Date: Sat, 22 Nov 2014 14:14:16 +0100 Subject: [PATCH 14/14] Add attribution as requested --- linq/linq.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linq/linq.d.ts b/linq/linq.d.ts index ce02870ad..461fe2eb0 100644 --- a/linq/linq.d.ts +++ b/linq/linq.d.ts @@ -1,6 +1,6 @@ // Type definitions for linq.js 2.2 // Project: http://linqjs.codeplex.com/ -// Definitions by: Marcin Najder +// Definitions by: Marcin Najder , Sebastiaan Dammann // Definitions: https://github.com/borisyankov/DefinitelyTyped // todo: jQuery plugin, RxJS Binding