rename lib to sequence-js
This commit is contained in:
738
src/sync/impl.ts
738
src/sync/impl.ts
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,10 @@
|
||||
import { mathRandom } from "../random/index.js";
|
||||
import { RandomGenerator } from "../random/types.js";
|
||||
import { BigIntRangeEnumerable, ConcatEnumerable, EmptyEnumerable, EnumerableMarker, FunctionEnumerable, GeneratorEnumerable, RangeEnumerable, RepeatEnumerable, RepeatForeverEnumerable, WrappedArray, WrappedArrayLike, WrappedIterable, WrappedMap, WrappedObject, WrappedSet } from "./impl.js";
|
||||
import { Enumerable } from "./types.js";
|
||||
import { BigIntRangeSequence, ConcatSequence, EmptySequence, SequenceMarker, FunctionSequence, GeneratorSequence, RangeSequence, RepeatSequence, RepeatForeverSequence, WrappedArray, WrappedArrayLike, WrappedIterable, WrappedMap, WrappedObject, WrappedSet } from "./impl.js";
|
||||
import { Sequence } from "./types.js";
|
||||
|
||||
export function wrap<T>(iterable: Iterable<T>): Enumerable<T> {
|
||||
if (isEnumerable<T>(iterable)) {
|
||||
export function wrap<T>(iterable: Iterable<T>): Sequence<T> {
|
||||
if (isSequence<T>(iterable)) {
|
||||
return iterable;
|
||||
}
|
||||
|
||||
@@ -17,41 +17,41 @@ export function wrap<T>(iterable: Iterable<T>): Enumerable<T> {
|
||||
}
|
||||
|
||||
if (iterable instanceof Map) {
|
||||
return map(iterable) as unknown as Enumerable<T>;
|
||||
return map(iterable) as unknown as Sequence<T>;
|
||||
}
|
||||
|
||||
return sequence(iterable);
|
||||
}
|
||||
|
||||
export function sequence<T>(iterable: Iterable<T>): Enumerable<T> {
|
||||
export function sequence<T>(iterable: Iterable<T>): Sequence<T> {
|
||||
return new WrappedIterable(iterable);
|
||||
}
|
||||
|
||||
export function empty<T>(): Enumerable<T> {
|
||||
return EmptyEnumerable.INSTANCE;
|
||||
export function empty<T>(): Sequence<T> {
|
||||
return EmptySequence.INSTANCE;
|
||||
}
|
||||
|
||||
export function single<T>(obj: T): Enumerable<T> {
|
||||
export function single<T>(obj: T): Sequence<T> {
|
||||
return new WrappedObject(obj);
|
||||
}
|
||||
|
||||
export function array<T>(array: T[]): Enumerable<T> {
|
||||
export function array<T>(array: T[]): Sequence<T> {
|
||||
return new WrappedArray(array);
|
||||
}
|
||||
|
||||
export function arrayLike<T>(arrayLike: ArrayLike<T>): Enumerable<T> {
|
||||
export function arrayLike<T>(arrayLike: ArrayLike<T>): Sequence<T> {
|
||||
return new WrappedArrayLike(arrayLike);
|
||||
}
|
||||
|
||||
export function set<T>(set: Set<T>): Enumerable<T> {
|
||||
export function set<T>(set: Set<T>): Sequence<T> {
|
||||
return new WrappedSet(set);
|
||||
}
|
||||
|
||||
export function map<K, V>(map: Map<K, V>): Enumerable<[K, V]> {
|
||||
export function map<K, V>(map: Map<K, V>): Sequence<[K, V]> {
|
||||
return new WrappedMap(map);
|
||||
}
|
||||
|
||||
export function of<T>(...elements: T[]): Enumerable<T> {
|
||||
export function of<T>(...elements: T[]): Sequence<T> {
|
||||
switch (elements.length) {
|
||||
case 0:
|
||||
return empty();
|
||||
@@ -62,30 +62,30 @@ export function of<T>(...elements: T[]): Enumerable<T> {
|
||||
}
|
||||
}
|
||||
|
||||
export function ofPropertyKeys<T extends PropertyKey>(...elements: T[]): Enumerable<T> {
|
||||
export function ofPropertyKeys<T extends PropertyKey>(...elements: T[]): Sequence<T> {
|
||||
return of(...elements);
|
||||
}
|
||||
|
||||
export function entries<T>(o: Record<string, T> | ArrayLike<T>): Enumerable<[string, T]> {
|
||||
export function entries<T>(o: Record<string, T> | ArrayLike<T>): Sequence<[string, T]> {
|
||||
return array(Object.entries(o));
|
||||
}
|
||||
|
||||
export function keys(o: object): Enumerable<string> {
|
||||
export function keys(o: object): Sequence<string> {
|
||||
return array(Object.keys(o));
|
||||
}
|
||||
|
||||
export function func<T>(f: () => T): Enumerable<T> {
|
||||
return new FunctionEnumerable(f);
|
||||
export function func<T>(f: () => T): Sequence<T> {
|
||||
return new FunctionSequence(f);
|
||||
}
|
||||
|
||||
export function generator<T>(generator: () => Iterable<T>): Enumerable<T> {
|
||||
return new GeneratorEnumerable(generator);
|
||||
export function generator<T>(generator: () => Iterable<T>): Sequence<T> {
|
||||
return new GeneratorSequence(generator);
|
||||
}
|
||||
|
||||
export function range(max: number): Enumerable<number>
|
||||
export function range(min: number, max: number): Enumerable<number>
|
||||
export function range(min: number, max: number, step: number): Enumerable<number>
|
||||
export function range(a: number, b?: number, c?: number): Enumerable<number> {
|
||||
export function range(max: number): Sequence<number>
|
||||
export function range(min: number, max: number): Sequence<number>
|
||||
export function range(min: number, max: number, step: number): Sequence<number>
|
||||
export function range(a: number, b?: number, c?: number): Sequence<number> {
|
||||
if (b === undefined) {
|
||||
b = a;
|
||||
a = 0;
|
||||
@@ -95,13 +95,13 @@ export function range(a: number, b?: number, c?: number): Enumerable<number> {
|
||||
c = 1;
|
||||
}
|
||||
|
||||
return new RangeEnumerable(a, b, c);
|
||||
return new RangeSequence(a, b, c);
|
||||
}
|
||||
|
||||
export function bigintRange(max: bigint): Enumerable<bigint>
|
||||
export function bigintRange(min: bigint, max: bigint): Enumerable<bigint>
|
||||
export function bigintRange(min: bigint, max: bigint, step: bigint): Enumerable<bigint>
|
||||
export function bigintRange(a: bigint, b?: bigint, c?: bigint): Enumerable<bigint> {
|
||||
export function bigintRange(max: bigint): Sequence<bigint>
|
||||
export function bigintRange(min: bigint, max: bigint): Sequence<bigint>
|
||||
export function bigintRange(min: bigint, max: bigint, step: bigint): Sequence<bigint>
|
||||
export function bigintRange(a: bigint, b?: bigint, c?: bigint): Sequence<bigint> {
|
||||
if (b === undefined) {
|
||||
b = a;
|
||||
a = 0n;
|
||||
@@ -111,12 +111,12 @@ export function bigintRange(a: bigint, b?: bigint, c?: bigint): Enumerable<bigin
|
||||
c = 1n;
|
||||
}
|
||||
|
||||
return new BigIntRangeEnumerable(a, b, c);
|
||||
return new BigIntRangeSequence(a, b, c);
|
||||
}
|
||||
|
||||
export function repeat<T>(value: T, count?: number): Enumerable<T> {
|
||||
export function repeat<T>(value: T, count?: number): Sequence<T> {
|
||||
if (count == undefined) {
|
||||
return new RepeatForeverEnumerable(value);
|
||||
return new RepeatForeverSequence(value);
|
||||
}
|
||||
|
||||
if (count < 0) {
|
||||
@@ -131,17 +131,17 @@ export function repeat<T>(value: T, count?: number): Enumerable<T> {
|
||||
return new WrappedObject(value);
|
||||
}
|
||||
|
||||
return new RepeatEnumerable(value, count);
|
||||
return new RepeatSequence(value, count);
|
||||
}
|
||||
|
||||
export function randomSequence(random?: RandomGenerator): Enumerable<number> {
|
||||
return new FunctionEnumerable(random ?? mathRandom);
|
||||
export function randomSequence(random?: RandomGenerator): Sequence<number> {
|
||||
return new FunctionSequence(random ?? mathRandom);
|
||||
}
|
||||
|
||||
export function concat<T>(...enumerables: Enumerable<T>[]): Enumerable<T> {
|
||||
return new ConcatEnumerable(enumerables);
|
||||
export function concat<T>(...sequences: Sequence<T>[]): Sequence<T> {
|
||||
return new ConcatSequence(sequences);
|
||||
}
|
||||
|
||||
export function isEnumerable<T = any>(obj: any): obj is Enumerable<T> {
|
||||
return obj instanceof EnumerableMarker;
|
||||
export function isSequence<T = any>(obj: any): obj is Sequence<T> {
|
||||
return obj instanceof SequenceMarker;
|
||||
}
|
||||
|
||||
@@ -2,42 +2,42 @@ import { Collector } from "../collector/types.js";
|
||||
import { RandomOptions } from "../random/types.js";
|
||||
import { Predicate, Converter, FilterPredicate, Equater, BiConverter, Accumulator, Comparer, Action } from "../types.js";
|
||||
|
||||
export interface Enumerable<TElement> extends Iterable<TElement> {
|
||||
export interface Sequence<TElement> extends Iterable<TElement> {
|
||||
iterator(): Iterator<TElement>;
|
||||
|
||||
apply<TResult>(pipeline: (enumerable: Enumerable<TElement>) => TResult): TResult;
|
||||
apply<TResult>(pipeline: (sequence: Sequence<TElement>) => TResult): TResult;
|
||||
|
||||
count(predicate?: Predicate<TElement>): number;
|
||||
nonEnumeratedCount(): number;
|
||||
fastCount(): number;
|
||||
maxCount(): number;
|
||||
|
||||
select<TResult>(selector: Converter<TElement, TResult>): Enumerable<TResult>;
|
||||
selectMany<TResult>(selector: Converter<TElement, Iterable<TResult>>): Enumerable<TResult>;
|
||||
select<TResult>(selector: Converter<TElement, TResult>): Sequence<TResult>;
|
||||
selectMany<TResult>(selector: Converter<TElement, Iterable<TResult>>): Sequence<TResult>;
|
||||
|
||||
where<TFiltered extends TElement>(predicate: FilterPredicate<TElement, TFiltered>): Enumerable<TFiltered>;
|
||||
where(predicate: Predicate<TElement>): Enumerable<TElement>;
|
||||
where<TFiltered extends TElement>(predicate: FilterPredicate<TElement, TFiltered>): Sequence<TFiltered>;
|
||||
where(predicate: Predicate<TElement>): Sequence<TElement>;
|
||||
|
||||
groupBy<TKey>(keySelector: Converter<TElement, TKey>, elementSelector?: undefined, keyComparer?: Equater<TKey>): Enumerable<GroupedEnumerable<TKey, TElement>>;
|
||||
groupBy<TKey, TResult>(keySelector: Converter<TElement, TKey>, elementSelector: Converter<TElement, TResult>, keyComparer?: Equater<TKey>): Enumerable<GroupedEnumerable<TKey, TResult>>;
|
||||
groupBy<TKey>(keySelector: Converter<TElement, TKey>, elementSelector?: undefined, keyComparer?: Equater<TKey>): Sequence<GroupedSequence<TKey, TElement>>;
|
||||
groupBy<TKey, TResult>(keySelector: Converter<TElement, TKey>, elementSelector: Converter<TElement, TResult>, keyComparer?: Equater<TKey>): Sequence<GroupedSequence<TKey, TResult>>;
|
||||
|
||||
join<TOther, TKey>(iterable: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector?: undefined, keyComparer?: Equater<TKey>): Enumerable<[TElement, TOther]>;
|
||||
join<TOther, TKey, TResult>(iterable: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector: BiConverter<TElement, TOther, TResult>, keyComparer?: Equater<TKey>): Enumerable<TResult>;
|
||||
join<TOther, TKey>(iterable: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector?: undefined, keyComparer?: Equater<TKey>): Sequence<[TElement, TOther]>;
|
||||
join<TOther, TKey, TResult>(iterable: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector: BiConverter<TElement, TOther, TResult>, keyComparer?: Equater<TKey>): Sequence<TResult>;
|
||||
|
||||
groupJoin<TOther, TKey>(iterable: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector?: undefined, keyComparer?: Equater<TKey>): Enumerable<GroupedEnumerable<TElement, TOther>>;
|
||||
groupJoin<TOther, TKey, TResult>(iterable: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector: BiConverter<TElement, Enumerable<TOther>, TResult>, keyComparer?: Equater<TKey>): Enumerable<TResult>;
|
||||
groupJoin<TOther, TKey>(iterable: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector?: undefined, keyComparer?: Equater<TKey>): Sequence<GroupedSequence<TElement, TOther>>;
|
||||
groupJoin<TOther, TKey, TResult>(iterable: Iterable<TOther>, firstKeySelector: Converter<TElement, TKey>, secondKeySelector: Converter<TOther, TKey>, resultSelector: BiConverter<TElement, Sequence<TOther>, TResult>, keyComparer?: Equater<TKey>): Sequence<TResult>;
|
||||
|
||||
contains(obj: TElement, equater?: Equater<TElement>): boolean;
|
||||
|
||||
sequenceEquals(iterable: Iterable<TElement>, equater?: Equater<TElement>): boolean;
|
||||
|
||||
append(obj: TElement): Enumerable<TElement>;
|
||||
append(obj: TElement): Sequence<TElement>;
|
||||
|
||||
prepend(obj: TElement): Enumerable<TElement>;
|
||||
prepend(obj: TElement): Sequence<TElement>;
|
||||
|
||||
remove(obj: TElement, all?: boolean, equater?: Equater<TElement>): Enumerable<TElement>;
|
||||
remove(obj: TElement, all?: boolean, equater?: Equater<TElement>): Sequence<TElement>;
|
||||
|
||||
concat(...iterables: Iterable<TElement>[]): Enumerable<TElement>;
|
||||
concat(...iterables: Iterable<TElement>[]): Sequence<TElement>;
|
||||
|
||||
first(predicate?: Predicate<TElement>): TElement;
|
||||
firstOrDefault(predicate?: Predicate<TElement>, def?: TElement): TElement | undefined;
|
||||
@@ -61,23 +61,23 @@ export interface Enumerable<TElement> extends Iterable<TElement> {
|
||||
max(comparer?: Comparer<TElement>): TElement;
|
||||
maxBy<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): TElement;
|
||||
|
||||
order(comparer?: Comparer<TElement>): OrderedEnumerable<TElement>;
|
||||
orderBy<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedEnumerable<TElement>;
|
||||
order(comparer?: Comparer<TElement>): OrderedSequence<TElement>;
|
||||
orderBy<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedSequence<TElement>;
|
||||
|
||||
orderDescending(comparer?: Comparer<TElement>): OrderedEnumerable<TElement>;
|
||||
orderByDescending<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedEnumerable<TElement>;
|
||||
orderDescending(comparer?: Comparer<TElement>): OrderedSequence<TElement>;
|
||||
orderByDescending<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedSequence<TElement>;
|
||||
|
||||
distinct(equater?: Equater<TElement>): Enumerable<TElement>;
|
||||
distinctBy<TBy>(selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Enumerable<TElement>;
|
||||
distinct(equater?: Equater<TElement>): Sequence<TElement>;
|
||||
distinctBy<TBy>(selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Sequence<TElement>;
|
||||
|
||||
union(iterable: Iterable<TElement>, equater?: Equater<TElement>): Enumerable<TElement>;
|
||||
unionBy<TBy>(iterable: Iterable<TElement>, selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Enumerable<TElement>;
|
||||
union(iterable: Iterable<TElement>, equater?: Equater<TElement>): Sequence<TElement>;
|
||||
unionBy<TBy>(iterable: Iterable<TElement>, selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Sequence<TElement>;
|
||||
|
||||
except(iterable: Iterable<TElement>, equater?: Equater<TElement>): Enumerable<TElement>;
|
||||
exceptBy<TBy>(iterable: Iterable<TElement>, selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Enumerable<TElement>;
|
||||
except(iterable: Iterable<TElement>, equater?: Equater<TElement>): Sequence<TElement>;
|
||||
exceptBy<TBy>(iterable: Iterable<TElement>, selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Sequence<TElement>;
|
||||
|
||||
intersect(iterable: Iterable<TElement>, equater?: Equater<TElement>): Enumerable<TElement>;
|
||||
intersectBy<TBy>(iterable: Iterable<TElement>, selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Enumerable<TElement>;
|
||||
intersect(iterable: Iterable<TElement>, equater?: Equater<TElement>): Sequence<TElement>;
|
||||
intersectBy<TBy>(iterable: Iterable<TElement>, selector: Converter<TElement, TBy>, equater?: Equater<TBy>): Sequence<TElement>;
|
||||
|
||||
all(predicate: Predicate<TElement>): boolean;
|
||||
any(predicate: Predicate<TElement>): boolean;
|
||||
@@ -85,29 +85,29 @@ export interface Enumerable<TElement> extends Iterable<TElement> {
|
||||
none(predicate: Predicate<TElement>): boolean;
|
||||
none(): boolean;
|
||||
|
||||
skip(n: number): Enumerable<TElement>;
|
||||
skipLast(n: number): Enumerable<TElement>;
|
||||
skipWhile(condition: Predicate<TElement>): Enumerable<TElement>;
|
||||
skip(n: number): Sequence<TElement>;
|
||||
skipLast(n: number): Sequence<TElement>;
|
||||
skipWhile(condition: Predicate<TElement>): Sequence<TElement>;
|
||||
|
||||
take(n: number): Enumerable<TElement>;
|
||||
takeLast(n: number): Enumerable<TElement>;
|
||||
takeWhile(condition: Predicate<TElement>): Enumerable<TElement>;
|
||||
take(n: number): Sequence<TElement>;
|
||||
takeLast(n: number): Sequence<TElement>;
|
||||
takeWhile(condition: Predicate<TElement>): Sequence<TElement>;
|
||||
|
||||
peek(action: Action<TElement>): Enumerable<TElement>;
|
||||
peek(action: Action<TElement>): Sequence<TElement>;
|
||||
|
||||
forEach(action: Action<TElement>): void;
|
||||
|
||||
zip<TOther>(iterable: Iterable<TOther>): Enumerable<[TElement, TOther]>;
|
||||
zip<TOther>(iterable: Iterable<TOther>): Sequence<[TElement, TOther]>;
|
||||
|
||||
indexed(): Enumerable<[number, TElement]>;
|
||||
indexed(): Sequence<[number, TElement]>;
|
||||
|
||||
reversed(): Enumerable<TElement>;
|
||||
reversed(): Sequence<TElement>;
|
||||
|
||||
chunked(size: number): Enumerable<TElement[]>;
|
||||
chunked(size: number): Sequence<TElement[]>;
|
||||
|
||||
random(options?: RandomOptions<TElement>): TElement | undefined;
|
||||
|
||||
cached(): Enumerable<TElement>;
|
||||
cached(): Sequence<TElement>;
|
||||
|
||||
asArray(): TElement[];
|
||||
toArray(): TElement[];
|
||||
@@ -118,18 +118,18 @@ export interface Enumerable<TElement> extends Iterable<TElement> {
|
||||
collect<TResult>(collector: Collector<TElement, any, TResult>): TResult;
|
||||
}
|
||||
|
||||
export interface GroupedEnumerable<TKey, TElement> extends Enumerable<TElement> {
|
||||
export interface GroupedSequence<TKey, TElement> extends Sequence<TElement> {
|
||||
get key(): TKey;
|
||||
}
|
||||
|
||||
export interface OrderedEnumerable<TElement> extends Enumerable<TElement> {
|
||||
export interface OrderedSequence<TElement> extends Sequence<TElement> {
|
||||
get comparer(): Comparer<TElement> | undefined;
|
||||
|
||||
thenSelf(comparer?: Comparer<TElement>): OrderedEnumerable<TElement>;
|
||||
thenSelf(comparer?: Comparer<TElement>): OrderedSequence<TElement>;
|
||||
|
||||
thenBy<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedEnumerable<TElement>;
|
||||
thenBy<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedSequence<TElement>;
|
||||
|
||||
thenSelfDescending(comparer?: Comparer<TElement>): OrderedEnumerable<TElement>;
|
||||
thenSelfDescending(comparer?: Comparer<TElement>): OrderedSequence<TElement>;
|
||||
|
||||
thenByDescending<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedEnumerable<TElement>;
|
||||
thenByDescending<TBy>(selector: Converter<TElement, TBy>, comparer?: Comparer<TBy>): OrderedSequence<TElement>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user