1
0

rename lib to sequence-js

This commit is contained in:
2024-05-11 16:57:34 +02:00
parent 486abefba6
commit 05390027f8
9 changed files with 929 additions and 929 deletions

View File

@@ -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;
}