lightsword
Version:
LightSword Secure SOCKS5 Proxy / iOS VPN Server
501 lines (427 loc) • 20.1 kB
TypeScript
// Type definitions for Kinq 0.0.3
// Project: https://github.com/SunshinyNeko/Kinq
// Definitions by: SunshinyNeko
// Definitions: https://github.com/borisyankov/DefinitelyTyped
declare interface _Linqable<T> {
/* *************
* Linqable *
************* */
/**
* Applies an accumulator function over a sequence. The specified seed value is used as the initial accumulator value, and the specified function is used to select the result value.
*
* @param seed The initial accumulator value.
* @param transform An accumulator function to be invoked on each element.
* @param resultTransform A function to transform the final accumulator value into the result value.
* @return The transformed final accumulator value.
* transform: (current, next) -> result
*/
aggregate<T, TResult, TFinalResult>(seed: T, transform: (current: T, next: T) => TResult, resultTransform: (TResult) => TFinalResult): TFinalResult;
/**
* @see _Linqable<T>.aggregate
*/
aggregate<T, TResult>(seed: T, transform: (current: T, next: T) => TResult): TResult;
/**
* @see _Linqable<T>.aggregate
*/
aggregate<T, TResult>(transform: (current: T, next: T) => TResult): TResult;
/**
* Determines whether all elements of a sequence satisfy a condition.
*
* @param {Function} predicate The function called per iteraction till returns false.
* @return All elements satisfy a condition returns true, or returns false.
* predicate: (T) -> Boolean
*/
all(predicate: (T) => boolean): boolean;
/**
* Determines whether a sequence contains any elements.
*
* @param {(Function)} predicate The function called per iteraction till returns true.
* @return Any elements satisfy a condition returns true, or returns false.
* predicate: (T) -> Boolean
*/
any(predicate: (T) => boolean): boolean;
/**
*
*/
any(): boolean;
/**
* Computes the average of a sequence. The elements of this sequence should be Number.
*
* @param strict Strict mode: 1 is not equal to '1'
* @return Return the average of a sequence.
*/
average(strict: boolean): number;
/**
*
*/
average(): number;
/**
* Concatenates two sequences.
*
* @param otherSequence The other iterable sequence.
* @return The iterator of concatenated sequence.
*/
concatenate(otherSequence: Iterable<T>): _Linqable<T>;
/**
* Determines whether a sequence contains a specified element by using the default equality comparer.
*
* @param item The item which you want to check.
* @param {(Function)} equalityComparer The equality comparer.
* equalityComparer: (item1, item2) -> Boolean
*/
contains(item: T, equalityComparer: (item1: T, item2: T) => boolean): boolean;
/**
*
*/
contains(item: T): boolean;
/**
* Returns a number that represents how many elements in the specified sequence satisfy a condition.
*
* @param {(Function)} predicate The condition for compute item counts
* @return Return the count which satisfy a condition.
*/
count(predicate: (T) => boolean): number;
/**
*
*/
count(): number;
/**
* Returns the elements of the specified sequence or the specified value in a singleton collection if the sequence is empty.
*
* @param defaultValue The default value which you want to return.
*/
defaultIfEmpty(defaultValue: T): _Linqable<T>;
/**
* Returns distinct elements from a sequence by using a specified equalityComparer to compare values.
*
* @param {(Function)} equalityComparer The equality comparer
* equalityComparer: (item1, item2) -> Boolean
*/
distinct(equalityComparer: (item1: T, item2: T) => boolean): _Linqable<T>;
/**
*
*/
distinct(): _Linqable<T>;
/**
* Alias of forEach
*/
each(callback: (item: T, index: number) => void): void;
/**
* Returns the element at a specified index in a sequence.
*
* @param positon The zero-base index of element which you want.
* @param defaultValue The default value if the index is out of range.
* @return The element at a specified index or default value
*/
elementAt(index: number, defaultValue: T): T;
/**
*
*/
elementAt(index: number): T;
/**
* Returns an empty sequence.
*/
empty(): T[];
/**
* Produces the set difference of two sequences by using the default equality comparer to compare values.
*
* @param otherSequence A sequence whose elements that also occur in the first sequence will cause those elements to be removed from the returned sequence.
* @param {(Function)} equalityComparer The equality comparer called per iteraction
* @return A sequence that contains the set difference of the elements of two sequences.
*/
except(otherSequence: Iterable<T>, equalityComparer: (item1: T, item2: T) => boolean): _Linqable<T>;
/**
*
*/
except(otherSequence: Iterable<T>): _Linqable<T>;
/**
* Returns the first element in a sequence that satisfies a specified condition. Or throws an error if no element satisfies the condition in predicate.
*
* @param {(Function)} predicate The function called per iteraction till returns true.
* @param defaultValue The default value.
* @return The first element which satisfy condition or default value.
*/
first(predicate: (item: T) => boolean): T;
first(): T;
firstOrDefault(predicate: (item: T) => boolean, defaultValue: T): T;
firstOrDefault(): T;
/**
* Flattens a nested sequence (the nesting can be to any depth).
* @param deep Default is true, If you pass false, the sequence will only be flattened a single level.
*/
flatten<U extends _Linqable<T>>(deep: boolean): T;
/**
* Groups the elements of a sequence according to a specified key selector function and projects the elements for each group by using a specified function.
*
* @param keySelector A function to extract the key for each element. (Required)
* @param elementSelector A function to map each source element to an element. (Optional)
* @param resultTransform A function to create a result value from each group. (Optional)
* @return Returns iterable grouped items. Each item is { key: key, value: [items] }
*/
groupBy<TKey, TElement, TResult>(keySelector: (item: T) => TKey, elementSelector: (item: T) => TElement, resultTransform: (groupKey: TKey, items: TElement[]) => TResult): _Linqable<TResult>;
groupBy<TKey>(keySelector: (item: T) => TKey): _Linqable<T>;
/**
* Correlates the elements of two sequences based on equality of keys and groups the results. The default equality comparer is used to compare keys.
*
* @param inner The sequence to join to the first sequence.
* @param outerKeySelector A function to extract the join key from each element of the first sequence.
* @param innerKeySelector A function to extract the join key from each element of the second sequence.
* @param resultSelector A function to create a result element from an element from the first sequence and a collection of matching elements from the second sequence.
* @return A sequence that contains elements of type result that are obtained by performing a grouped join on two sequences.
* outerKeySelector: (outerItem) -> key
* innerKeySelector: (innerItem) -> key
* resultSelector: (outerItem, [groupedInnerItem]) -> result
*/
groupJoin(inner: any, outerKeySelector: any, innerKeySelector: any, resultSelector: any): {};
/**
* Produces the set intersection of two sequences by using the specified equalityComparer to compare values.
*
* @param otherSequence A sequence whose distinct elements that also appear in the first sequence will be returned.
* @param eqaulityComparer An equalityComparer to compare values.
* @return A sequence that contains the elements that form the set intersection of two sequences.
*/
intersect(otherSequence: Iterable<T>, equalityComparer: any): _Linqable<T>;
intersect(otherSequence: Iterable<T>): _Linqable<T>;
/**
* Correlates the elements of two sequences based on matching keys. A specified equalityComparer is used to compare keys.
*
* @param join The sequence to join to the first sequence.
* @param outerKeySelector A function to extract the join key from each element of the first sequence.
* @param innerKeySelector A function to extract the join key from each element of the second sequence.
* @param resultSelector A function to create a result element from two matching elements.
* @param keyEqualityComparer An comparer compare keys.
*
* outerKeySelector: (outerItem) -> key
* innerKeySelector: (innerItem) -> key
* resultSelector: (outerItem, innerItem) -> result
* keyEqualityComparer: (item1, item2) -> Boolean
*/
joinWith(inner: any, outerKeySelector: any, innerKeySelector: any, resultSelector: any, keyEqualityComparer: any): {};
/**
* Returns the last element of a sequence that satisfies a condition or a default value if no such element is found.
*
* @param predicate A function to test each element for a condition.
* @param defaultValue The default value if no such element is found.
* @return Default value if the sequence is empty or if no elements pass the test in the predicate function; otherwise, the last element that passes the test in the predicate function.
*/
last(predicate: (T) => boolean, defaultValue: any): T;
last(): T;
/**
* Returns the maximum value in a sequence.
*
* @param keySelector A transform function to apply to each element.
* @param comparer A comparer function to check with item is greater.
* @return The maximum value in the sequence.
* keySelector: (T) -> key
* comparer: (item1, item2) -> -1|0|1
*/
max<TKey>(keySelector: (item: T) => TKey, comparer: (item1: T, item2: T) => number): T;
max<TKey>(keySelector: (item: T) => TKey): T;
max(): T;
/**
* Returns the minimum value in a sequence.
*
* @param keySelector A transform function to apply to each element.
* @param comparer A comparer function to check with item is less.
* @return The minimum value in the sequence.
*/
min<TKey>(keySelector: (item: T) => TKey, comparer: (item1: T, item2: T) => number): T;
min<TKey>(keySelector: (item: T) => TKey): T;
min(): T;
/**
* Filters the elements of an sequence based on a specified type.
*
* @param type A string to specify which type to return.
* @return Filtered the elements of the sequence on.
*/
ofType<TCast>(type: TCast): _Linqable<TCast>;
/**
* Sorts the elements of a sequence in ascending order by using a specified comparer.
*
* @param keySelector A function to extract a key from an element.
* @param comparer An comparer to compare keys.
* @return A sequence whose elements are sorted according to a key.
*/
orderBy<TKey>(keySelector: (item: T) => TKey, comparer: (item1: T, item2: T) => number): _Linqable<T>;
orderBy<TKey>(keySelector: (item: T) => TKey): _Linqable<T>;
orderBy(): _Linqable<T>;
/**
* Sorts the elements of a sequence in descending order by using a specified comparer.
*
* @param keySelector A function to extract a key from an element.
* @param comparer An comparer to compare keys.
* @return A sequence whose elements are sorted in descending order according to a key.
*/
orderByDescending<TKey>(keySelector: (item: T) => TKey, comparer: (item1: T, item2: T) => number): _Linqable<T>;
orderByDescending<TKey>(keySelector: (item: T) => TKey): _Linqable<T>;
orderByDescending(): _Linqable<T>;
/**
* Inverts the order of the elements in a sequence.
*
* @return A sequence whose elements correspond to those of the input sequence in reverse order.
*/
reversed(): _Linqable<T>;
/**
* Projects each element of a sequence into a new form.
*
* @param {Function} transform The transform function called per interaction.
*
* transform: (T, index) -> any
*/
select<TResult>(transform: (item: T) => TResult): _Linqable<TResult>;
/**
* Projects each element of a sequence to an IEnumerable<T>, flattens the resulting sequences into one sequence, and invokes a result selector function on each element therein. The index of each source element is used in the intermediate projected form of that element.
*
* @param selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element.
* selector: (item, index) -> value
*/
selectMany<TResult>(selector: (T, number) => TResult): _Linqable<TResult>;
/**
* Determines whether two sequences are equal by comparing the elements by using the default equality comparer for their type.
*
* @param otherSequence A sequence to compare to the first sequence.
* @return true if the two source sequences are of equal length and their corresponding elements are equal according to the equality comparer for their type; otherwise, false.
*/
sequenceEqual(otherSequence: Iterable<T>, equalityComparer: (item1: T, item2: T) => boolean): boolean;
sequenceEqual(otherSequence: Iterable<T>): boolean;
/**
* Returns the only element of a sequence that satisfies a specified condition or a default value if no such element exists; this method throws an exception if more than one element satisfies the condition or sequence is empty.
*
* @param predicate A function to test an element for a condition.
* @param defaultValue The default value if no such element exists.
* @return The single element of the input sequence that satisfies a condition.
*/
single(predicate: (item: T) => boolean): T;
single(): T;
singleOrDefault(predicate: (item: T) => boolean, defaultValue: T): T;
singleOrDefault(): T;
/**
* Bypasses a specified number of elements in a sequence and then returns the remaining elements.
*
* @param count The number of elements to skip before returning the remaining elements.
* @return A sequence that contains the elements that occur after the specified index in the input sequence.
*/
skip(count: number): _Linqable<T>;
/**
* Bypasses elements in a sequence as long as a specified condition is true and then returns the remaining elements. The element's index is used in the logic of the predicate function.
*
* @param predicate A function to test each source element for a condition; the second parameter of the function represents the index of the source element.
* @return A sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate.
*/
skipWhile(predicate: (item: T) => boolean): _Linqable<T>;
/**
* Computes the sum of a sequence.
*
* @param transform The transform function called per interaction.
* @return The sum of the values in the sequence.
*/
sum<TResult>(transform: (item: T) => TResult): number;
sum(): number;
/**
* Returns a specified number of contiguous elements from the start of a sequence.
*
* @param count The number of elements to return.
* @return A sequence that contains the specified number of elements from the start of the input sequence.
*/
take(count: number): _Linqable<T>;
/**
* Returns elements from a sequence as long as a specified condition is true. The element's index is used in the logic of the predicate function.
*
* @param predicate A function to test each source element for a condition; the second parameter of the function represents the index of the source element.
* @return A sequence that contains elements from the input sequence that occur before the element at which the test no longer passes.
*/
takeWhile(predicate: (item: T) => boolean): _Linqable<T>;
/**
* Alias of orderBy
*/
thenBy<TKey>(keySelector: (item: T) => TKey, comparer: (item1: T, item2: T) => number): _Linqable<T>;
thenBy<TKey>(keySelector: (item: T) => TKey): _Linqable<T>;
thenBy(): _Linqable<T>;
/**
* Alias of orderByDescending
*/
thenByDescending<TKey>(keySelector: (item: T) => TKey, comparer: (item1: T, item2: T) => number): _Linqable<T>;
thenByDescending<TKey>(keySelector: (item: T) => TKey): _Linqable<T>;
thenByDescending(): _Linqable<T>;
/**
* Creates an array
*
* @return An array that contains the elements from the input sequence.
*/
toArray(): T[];
/**
* Alias of toArray
*/
toList(): T[];
/**
* Alias of toMap
*/
toDictionary<TKey, TResult>(keySelector: (item: T) => TKey, elementSelector: (item: T) => TResult): any;
/**
* Creates a map from a sequenece according to a specified key selector function, a comparer, and an element selector function.
*
* @param keySelector A function to extract a key from each element.
* @param elementSelector A transform function to produce a result element value from each element.
* @return A map that contains values from the input sequence.
* keySelector: (item) -> key (Required)
* elementSelector: (item) -> value (Optional)
*/
toMap<TKey, TResult>(keySelector: (item: T) => TKey, elementSelector: (item: T) => TResult): any;
/**
* Produces the set union of two sequences by using a specified equalityComparer.
*
* @param otherSequence A sequence whose distinct elements form the second set for the union.
* @param equalityComparer The equality comparer to compare values.
* @return A sequence that contains the elements from both input sequences, no duplicates.
*/
union(otherSequence: Iterable<T>, equalityComparer: (item1: T, item2: T) => boolean): _Linqable<T>;
union(otherSequence: Iterable<T>): _Linqable<T>;
/**
* Filters a sequence of values based on a predicate.
*
* @param {Function} predicate The filter function called per iteraction.
* @return iterator
* predicate: (T, index) -> Boolean
*/
where(predicate: (item: T, index: number) => boolean): _Linqable<T>;
/**
* Applies a specified function to the corresponding elements of two sequences, producing a sequence of the results.
*
* @param otherSequence The second sequence to merge.
* @param resultSelector A function that specifies how to merge the elements from the two sequences.
* @return A sequence that contains merged elements of two input sequences.
* resultSelector: (item, otherItem) -> result
*/
zip<T2, TResult>(otherSequence: Iterable<T>, resultSelector: (item: T, otherItem: T2) => TResult): _Linqable<TResult>;
zip<T2>(otherSequence: Iterable<T>): _Linqable<[T, T2]>;
}
// export interface _Linqable;
declare module 'kinq' {
/**
* Convert iterable object to linqable
*
* @param An object which implemented iterable interface.
* @return Linqable object.
*/
export function toLinqable<T>(iterable: IterableIterator<T>): _Linqable<T>;
/**
* Enable KINQ
*/
export function enable(): void;
}
declare interface Array<T> extends _Linqable<T> {
}
declare interface String extends _Linqable<String> {
}
declare interface Map<K, V> extends _Linqable<[K, V]> {
}
declare interface Set<T> extends _Linqable<T> {
}
declare interface WeakMap<K, V> extends _Linqable<[K, V]> {
}
declare interface WeakSet<T> extends _Linqable<T> {
}
declare interface Iterable<T> extends _Linqable<T> {
}
declare interface NodeBuffer extends _Linqable<number> {
}